## installations
install.packages("tidyverse")
install.packages("meta")
install.packages("metafor")
install.packages("devtools")
devtools::install_github("MathiasHarrer/dmetar")
install.packages("data.table")
install.packages("pwr")
install.packages("corrplot")
install.packages("Hmisc")
install.packages("PerformanceAnalytics")
install.packages("pheatmap")
install.packages("gtools")

setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1")

## import data and sort variable types
library(readxl)
full_data <- read_excel("AnMod_data.xlsx")

setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/TG_out")

full_data$Study <- as.factor(full_data$Study)

full_data$Protocol <- as.numeric(full_data$Protocol)
full_data$Sex <- as.factor(full_data$Sex)

full_data$Indiv_drug_class_3 <- as.factor(full_data$Indiv_drug_class_3)
full_data$Drug_Class_new_1_all <- as.factor(full_data$Drug_Class_new_1_all)
full_data$Intervention <- as.factor(full_data$Intervention)
full_data$Model_simple <- as.factor(full_data$Model_simple)
full_data$Background_simple <- as.factor(full_data$Background_simple)
full_data$Paper <- as.factor(full_data$Paper)

## log-transform skewed continuous variables ahead of meta-regression

hist(full_data$Chol_per)
full_data$log_Chol_per <- log(full_data$Chol_per)
hist(full_data$log_Chol_per)

hist(full_data$FructGluc_per)
full_data$log_FructGluc_per <- log(full_data$FructGluc_per)
hist(full_data$log_FructGluc_per)

hist(full_data$Sucr_kcal)
full_data$log_Sucr_kcal <- log(full_data$Sucr_kcal)
hist(full_data$log_Sucr_kcal)

hist(full_data$Fat_kcal)
full_data$log_Fat_kcal <- log(full_data$Fat_kcal)
hist(full_data$log_Fat_kcal)

hist(full_data$Age_start)
full_data$log_Age_start <- log(full_data$Age_start)
hist(full_data$log_Age_start)

hist(full_data$Age_end)
full_data$log_Age_end <- log(full_data$Age_end)
hist(full_data$log_Age_end)

hist(full_data$Duration)
full_data$log_Duration <- log(full_data$Duration)
hist(full_data$log_Duration)

hist(full_data$Wt_change)
full_data$log_Wt_change <- log(full_data$Wt_change)
hist(full_data$log_Wt_change)

hist(full_data$Gluc_change)
full_data$log_Gluc_change <- log(full_data$Gluc_change)
hist(full_data$log_Gluc_change)

hist(full_data$Insul_change)
full_data$log_Insul_change <- log(full_data$Insul_change)
hist(full_data$log_Insul_change)

## scale drug dose by each drug

library(tidyverse)

full_data <- full_data %>% group_by(Intervention) %>% mutate(Drug_dose = scale(Drug_dose))

########

## Run correlation analysis for continuous variables in models that don't cause weight loss

library(corrplot)
library(Hmisc)

flattenCorrMatrix <- function(cormat, pmat) {
  ut <- upper.tri(cormat)
  data.frame(
    row = rownames(cormat)[row(cormat)[ut]],
    column = rownames(cormat)[col(cormat)[ut]],
    cor  =(cormat)[ut],
    p = pmat[ut]
    )
}

full_data_corrplot = subset(full_data, select = c("Qual_score","log_Chol_per","log_FructGluc_per","log_Sucr_kcal","log_Fat_kcal","log_Age_start","log_Age_end","log_Duration","log_Wt_change","log_Gluc_change","log_Insul_change"))


full_cor_pears <- rcorr(as.matrix(full_data_corrplot), type="pearson")
full_cor_pears_tab <- flattenCorrMatrix(full_cor_pears$r, full_cor_pears$P)
write.table(full_cor_pears_tab, file="full_cor_pears_tab.csv",sep=",")

col<- colorRampPalette(c("blue4", "white", "firebrick3"))(20)

pdf(file="full_corrplot_v1.pdf",width=8,height=8)
full_corrplot <- corrplot(full_cor_pears$r, tl.cex = 1, order = "hclust", addgrid.col = "darkgray",bg="snow2",outline = T,tl.col="black", col=col,tl.srt=45,p.mat = full_cor_pears$P, insig = "label_sig", sig.level = c(.001, .01, .05), pch.cex=1.2, pch.col = "black", type = "upper")
full_corrplot
dev.off()


########

## Analysis for hepatic triglyceride content (TG)

########


## Power analysis
library(pwr)

## calculate common SD
full_data$TG_Int_SD2 <- full_data$TG_Int_SD*full_data$TG_Int_SD
full_data$TG_Pla_SD2 <- full_data$TG_Pla_SD*full_data$TG_Pla_SD
full_data$TG_comm_SD <- sqrt(((full_data$TG_Int_SD2+full_data$TG_Pla_SD2)/2))
full_data$TG_m_diff <- full_data$TG_Pla_Mean-full_data$TG_Int_Mean
full_data$TG_eff_size <- full_data$TG_m_diff/full_data$TG_comm_SD

library(tidyr)

TG_data <- full_data
TG_data <- TG_data %>% drop_na(TG_eff_size)

TG_data$power <- pwr.t2n.test(n1 = TG_data$TG_Int_size, n2 = TG_data$TG_Pla_size, d = TG_data$TG_eff_size)$power

write.table(TG_data$power,file="TG_data_power.csv",sep=",")

hist(TG_data$power)

TG_dens_power <- density(TG_data$power)

pdf(file="TG_kernel_power_v1.pdf")
plot(TG_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)")
polygon(TG_dens_power, col="red", border="blue")
dev.off()


## load packages for metan
library(dmetar)
library(meta)
library(metafor)
library(readxl)
max.print = 100000

## drop where <3 unique studies for any drug class
TG_drugsclass_counts <- TG_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
TG_class_counts <- TG_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

TG_class_less3 = subset(TG_class_counts, n <3)
str(TG_class_less3)
TG_class_less3$Drug_Class_new_1_all <- droplevels(TG_class_less3$Drug_Class_new_1_all)
TG_class_droplist <- TG_class_less3$Drug_Class_new_1_all

TG_data_min3class <- TG_data %>% filter(!Drug_Class_new_1_all %in% TG_class_droplist)


## run metan
TG_metan_class_main <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

TG_metan_class <- update(TG_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
TG_metan_class_tab <- data.frame(TG_metan_class[["TE.random.w"]])
TG_metan_class_tab$drug <- TG_metan_class[["bylevs"]]
TG_metan_class_tab$SE <- TG_metan_class[["seTE.random.w"]]
TG_metan_class_tab$lower <- TG_metan_class[["lower.random.w"]]
TG_metan_class_tab$upper <- TG_metan_class[["upper.random.w"]]
TG_metan_class_tab$Pz <- TG_metan_class[["pval.random.w"]]
TG_metan_class_tab$weight <- TG_metan_class[["w.random.w"]]
TG_metan_class_tab$k <- TG_metan_class[["k.w"]]
TG_metan_class_tab$controls <- TG_metan_class[["n.c.w"]]
TG_metan_class_tab$experimental <- TG_metan_class[["n.e.w"]]
TG_metan_class_tab$Q <- TG_metan_class[["Q.w"]]
TG_metan_class_tab$Pq <- TG_metan_class[["pval.Q.w"]]
TG_metan_class_tab$tau <- TG_metan_class[["tau.w"]]
TG_metan_class_tab$I2 <- TG_metan_class[["I2.w"]]
TG_metan_class_tab <- TG_metan_class_tab %>% rename(MD = TG_metan_class...TE.random.w...)
TG_metan_class_tab <- TG_metan_class_tab[order(-TG_metan_class_tab$MD),]
TG_metan_class_tab$row_number <- 1:nrow(TG_metan_class_tab) 
TG_metan_class_tab$subgroup <- "Subgroup"
TG_class_counts <- TG_class_counts %>% rename(drug = Drug_Class_new_1_all)
TG_metan_class_tab <- merge(TG_class_counts, TG_metan_class_tab, by="drug")

TG_metan_class_tab_overall <- data.frame(TG_metan_class[["TE.random"]])
TG_metan_class_tab_overall$drug <- "Overall"
TG_metan_class_tab_overall$SE <- TG_metan_class[["seTE.random"]]
TG_metan_class_tab_overall$lower <- TG_metan_class[["lower.random"]]
TG_metan_class_tab_overall$upper <- TG_metan_class[["upper.random"]]
TG_metan_class_tab_overall$Pz <- TG_metan_class[["pval.random"]]
TG_metan_class_tab_overall$weight <- (max(TG_metan_class_tab$weight)*2)
TG_metan_class_tab_overall$k <- TG_metan_class[["k"]]
TG_metan_class_tab_overall$controls <- sum(TG_metan_class_tab$controls)
TG_metan_class_tab_overall$experimental <- sum(TG_metan_class_tab$experimental)
TG_metan_class_tab_overall$Q <- TG_metan_class[["Q"]]
TG_metan_class_tab_overall$Pq <- TG_metan_class[["pval.Q"]]
TG_metan_class_tab_overall$tau <- TG_metan_class[["tau"]]
TG_metan_class_tab_overall$I2 <- TG_metan_class[["I2"]]
TG_metan_class_tab_overall <- TG_metan_class_tab_overall %>% rename(MD = TG_metan_class...TE.random...)
TG_metan_class_tab_overall$row_number <- ((nrow(TG_metan_class_tab))+1)
TG_metan_class_tab_overall$subgroup <- "Overall"
TG_metan_class_tab_overall$n <- sum(TG_metan_class_tab$n)
TG_metan_class_sumtab <- rbind(TG_metan_class_tab, TG_metan_class_tab_overall)
TG_metan_class_sumtab$weight <- as.numeric(TG_metan_class_sumtab$weight)
TG_metan_class_sumtab$row_number <- as.numeric(TG_metan_class_sumtab$row_number)
TG_metan_class_sumtab$subgroup <- as.factor(TG_metan_class_sumtab$subgroup)
TG_metan_class_sumtab$total = TG_metan_class_sumtab$controls + TG_metan_class_sumtab$experimental

TG_metan_class_sumtab$text <- paste(format(round(TG_metan_class_sumtab$MD, 1), nsmall = 1), format(round(TG_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
TG_metan_class_sumtab$text <- paste(TG_metan_class_sumtab$text, format(round(TG_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
TG_metan_class_sumtab$text <- paste(TG_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

TG_metan_class_sumtab$SE_1dig <- paste(format(round(TG_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
TG_metan_class_sumtab$Pz_1dig <- paste((signif(TG_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
TG_metan_class_sumtab$tI2_2dig <- paste(format(round(TG_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
TG_metan_class_sumtab$tau_1dig <- paste(format(round(TG_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
TG_metan_class_sumtab$Pq_1dig <- paste((signif(TG_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(TG_metan_class_sumtab,file="TG_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(TG_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(TG_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(TG_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = TG_metan_class_tab_overall$lower
overall_max = TG_metan_class_tab_overall$upper

TG_metan_class_ybreaks <- nrow(TG_metan_class_sumtab)
TG_metan_class_sumtab <- TG_metan_class_sumtab[order(TG_metan_class_sumtab$row_number),]

TG_metan_class_forest <- ggplot(data= TG_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: TG_metan_class_ybreaks, labels = TG_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in hepatic triglyceride (%)") + scale_x_continuous(limits=c(-125, 150), breaks=seq(-75, 50, 25), expand=c(0,0)) + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=25, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-150, xmax=-75, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=TG_metan_class_sumtab, aes(x=25, label=text), size = 3.5, hjust=0) + geom_text(data=TG_metan_class_sumtab, aes(x=-115, label=k), size = 3.5, hjust=0) + geom_text(data=TG_metan_class_sumtab, aes(x=-90, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-125, 75))

pdf(file="TG_metan_class_forest.pdf",width=10,height=8)
TG_metan_class_forest
dev.off()

#######

## bias analysis

TG_class_eggers <- eggers.test(x = TG_metan_class_main)
TG_class_eggers
sink("TG_class_eggers.txt")
print(TG_class_eggers)
sink()

TG_class_trimfill <- trimfill(TG_metan_class_main)
TG_class_trimfill
sink("TG_class_trimfill.txt")
print(TG_class_trimfill)
sink()

pdf(file="TG_class_funnel.pdf")
funnel(TG_class_trimfill, xlab="Mean difference in hepatic TG (%)", contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-200, 1, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue"))
dev.off()

## use Baujat plot to look for outliers

pdf(file="TG_class_baujat.pdf")
TG_class_baujat <- baujat(TG_metan_class_main)
TG_class_baujat
dev.off()

## look for outliers based on SD

TG_commSD_mean <- mean(TG_data$TG_comm_SD, na.rm=TRUE)
TG_commSD_SD <- sd(TG_data$TG_comm_SD, na.rm=TRUE)

TG_commSD_norm <- dnorm(TG_data$TG_comm_SD, mean = TG_commSD_mean, sd = TG_commSD_SD, log = FALSE)
TG_commSD_norm <- as.data.frame(TG_commSD_norm)
TG_commSD_norm$TG_comm_SD <- TG_data$TG_comm_SD
TG_commSD_norm$Paper <- TG_data$Paper

pdf(file = "TG_commSD_norm.pdf")
plot(TG_commSD_norm$TG_comm_SD, TG_commSD_norm$TG_commSD_norm)
dev.off()

## exclude studies with TG_comm_SD >100 or high contribution to heterogeneity on baujat plot

TG_NoOutlier_data = subset(TG_data, TG_comm_SD <100)
TG_NoOutlier_data <- TG_NoOutlier_data %>% filter(Paper != "Wu 2016" & Paper != "Uto 2005" & Paper != "Ota 2007_1" & Paper != "Khaleel 2017")


#######


## re-rerun after outliers excluded


## drop where <3 unique studies for any drug class
TG_NoOutlier_drugsclass_counts <- TG_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
TG_NoOutlier_class_counts <- TG_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

TG_NoOutlier_class_less3 = subset(TG_NoOutlier_class_counts, n <3)
str(TG_NoOutlier_class_less3)
TG_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(TG_NoOutlier_class_less3$Drug_Class_new_1_all)
TG_NoOutlier_class_droplist <- TG_NoOutlier_class_less3$Drug_Class_new_1_all

TG_NoOutlier_data_min3class <- TG_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% TG_NoOutlier_class_droplist)


## run metan
TG_NoOutlier_metan_class_main <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

TG_NoOutlier_metan_class <- update(TG_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
TG_NoOutlier_metan_class_tab <- data.frame(TG_NoOutlier_metan_class[["TE.random.w"]])
TG_NoOutlier_metan_class_tab$drug <- TG_NoOutlier_metan_class[["bylevs"]]
TG_NoOutlier_metan_class_tab$SE <- TG_NoOutlier_metan_class[["seTE.random.w"]]
TG_NoOutlier_metan_class_tab$lower <- TG_NoOutlier_metan_class[["lower.random.w"]]
TG_NoOutlier_metan_class_tab$upper <- TG_NoOutlier_metan_class[["upper.random.w"]]
TG_NoOutlier_metan_class_tab$Pz <- TG_NoOutlier_metan_class[["pval.random.w"]]
TG_NoOutlier_metan_class_tab$weight <- TG_NoOutlier_metan_class[["w.random.w"]]
TG_NoOutlier_metan_class_tab$k <- TG_NoOutlier_metan_class[["k.w"]]
TG_NoOutlier_metan_class_tab$controls <- TG_NoOutlier_metan_class[["n.c.w"]]
TG_NoOutlier_metan_class_tab$experimental <- TG_NoOutlier_metan_class[["n.e.w"]]
TG_NoOutlier_metan_class_tab$Q <- TG_NoOutlier_metan_class[["Q.w"]]
TG_NoOutlier_metan_class_tab$Pq <- TG_NoOutlier_metan_class[["pval.Q.w"]]
TG_NoOutlier_metan_class_tab$tau <- TG_NoOutlier_metan_class[["tau.w"]]
TG_NoOutlier_metan_class_tab$I2 <- TG_NoOutlier_metan_class[["I2.w"]]
TG_NoOutlier_metan_class_tab <- TG_NoOutlier_metan_class_tab %>% rename(MD = TG_NoOutlier_metan_class...TE.random.w...)
TG_NoOutlier_metan_class_tab <- TG_NoOutlier_metan_class_tab[order(-TG_NoOutlier_metan_class_tab$MD),]
TG_NoOutlier_metan_class_tab <- TG_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n())
TG_NoOutlier_metan_class_tab$subgroup <- "Subgroup"
TG_NoOutlier_class_counts <- TG_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all)
TG_NoOutlier_metan_class_tab <- merge(TG_NoOutlier_class_counts, TG_NoOutlier_metan_class_tab, by="drug")

TG_NoOutlier_metan_class_tab_overall <- data.frame(TG_NoOutlier_metan_class[["TE.random"]])
TG_NoOutlier_metan_class_tab_overall$drug <- "Overall"
TG_NoOutlier_metan_class_tab_overall$SE <- TG_NoOutlier_metan_class[["seTE.random"]]
TG_NoOutlier_metan_class_tab_overall$lower <- TG_NoOutlier_metan_class[["lower.random"]]
TG_NoOutlier_metan_class_tab_overall$upper <- TG_NoOutlier_metan_class[["upper.random"]]
TG_NoOutlier_metan_class_tab_overall$Pz <- TG_NoOutlier_metan_class[["pval.random"]]
TG_NoOutlier_metan_class_tab_overall$weight <- (max(TG_NoOutlier_metan_class_tab$weight)*2)
TG_NoOutlier_metan_class_tab_overall$k <- TG_NoOutlier_metan_class[["k"]]
TG_NoOutlier_metan_class_tab_overall$controls <- sum(TG_NoOutlier_metan_class_tab$controls)
TG_NoOutlier_metan_class_tab_overall$experimental <- sum(TG_NoOutlier_metan_class_tab$experimental)
TG_NoOutlier_metan_class_tab_overall$Q <- TG_NoOutlier_metan_class[["Q"]]
TG_NoOutlier_metan_class_tab_overall$Pq <- TG_NoOutlier_metan_class[["pval.Q"]]
TG_NoOutlier_metan_class_tab_overall$tau <- TG_NoOutlier_metan_class[["tau"]]
TG_NoOutlier_metan_class_tab_overall$I2 <- TG_NoOutlier_metan_class[["I2"]]
TG_NoOutlier_metan_class_tab_overall <- TG_NoOutlier_metan_class_tab_overall %>% rename(MD = TG_NoOutlier_metan_class...TE.random...)
TG_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(TG_NoOutlier_metan_class_tab))+1)
TG_NoOutlier_metan_class_tab_overall$subgroup <- "Overall"
TG_NoOutlier_metan_class_tab_overall$n <- sum(TG_NoOutlier_metan_class_tab$n)
TG_NoOutlier_metan_class_sumtab <- rbind(TG_NoOutlier_metan_class_tab, TG_NoOutlier_metan_class_tab_overall)
TG_NoOutlier_metan_class_sumtab$weight <- as.numeric(TG_NoOutlier_metan_class_sumtab$weight)
TG_NoOutlier_metan_class_sumtab$row_number <- as.numeric(TG_NoOutlier_metan_class_sumtab$row_number)
TG_NoOutlier_metan_class_sumtab$subgroup <- as.factor(TG_NoOutlier_metan_class_sumtab$subgroup)
TG_NoOutlier_metan_class_sumtab$total = TG_NoOutlier_metan_class_sumtab$controls + TG_NoOutlier_metan_class_sumtab$experimental

TG_NoOutlier_metan_class_sumtab$text <- paste(format(round(TG_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(TG_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
TG_NoOutlier_metan_class_sumtab$text <- paste(TG_NoOutlier_metan_class_sumtab$text, format(round(TG_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
TG_NoOutlier_metan_class_sumtab$text <- paste(TG_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

TG_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(TG_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
TG_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(TG_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
TG_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(TG_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
TG_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(TG_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
TG_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(TG_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(TG_NoOutlier_metan_class_sumtab,file="TG_NoOutlier_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(TG_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(TG_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(TG_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = TG_NoOutlier_metan_class_tab_overall$lower
overall_max = TG_NoOutlier_metan_class_tab_overall$upper

TG_NoOutlier_metan_class_ybreaks <- nrow(TG_NoOutlier_metan_class_sumtab)
TG_NoOutlier_metan_class_sumtab <- TG_NoOutlier_metan_class_sumtab[order(TG_NoOutlier_metan_class_sumtab$row_number),]

TG_NoOutlier_metan_class_forest <- ggplot(data= TG_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: TG_NoOutlier_metan_class_ybreaks, labels = TG_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in hepatic triglyceride (%)") + scale_x_continuous(limits=c(-125, 150), breaks=seq(-75, 50, 25), expand=c(0,0)) + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=25, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-150, xmax=-75, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=TG_NoOutlier_metan_class_sumtab, aes(x=25, label=text), size = 3.5, hjust=0) + geom_text(data=TG_NoOutlier_metan_class_sumtab, aes(x=-115, label=k), size = 3.5, hjust=0) + geom_text(data=TG_NoOutlier_metan_class_sumtab, aes(x=-90, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-125, 75))

pdf(file="TG_NoOutlier_metan_class_forest.pdf",width=10,height=8)
TG_NoOutlier_metan_class_forest
dev.off()

#######

## re-run using sub-grouping by individual drugs



## drop where <3 unique studies for any drug class
TG_drugIndiv_counts <- TG_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n())
TG_drugIndiv_sum_counts <- TG_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n())

TG_drugIndiv_less3 = subset(TG_drugIndiv_sum_counts, n <3)
str(TG_drugIndiv_less3)
TG_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(TG_drugIndiv_less3$Indiv_drug_class_3)
TG_drugIndiv_droplist <- TG_drugIndiv_less3$Indiv_drug_class_3

TG_data_min3drug <- TG_data %>% filter(!Indiv_drug_class_3 %in% TG_drugIndiv_droplist)


## run metan
TG_metan_drugIndiv <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

TG_metan_drugIndiv <- update(TG_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug")

## make summary table of results
TG_metan_drugIndiv_tab <- data.frame(TG_metan_drugIndiv[["TE.random.w"]])
TG_metan_drugIndiv_tab$drug <- TG_metan_drugIndiv[["bylevs"]]
TG_metan_drugIndiv_tab$SE <- TG_metan_drugIndiv[["seTE.random.w"]]
TG_metan_drugIndiv_tab$lower <- TG_metan_drugIndiv[["lower.random.w"]]
TG_metan_drugIndiv_tab$upper <- TG_metan_drugIndiv[["upper.random.w"]]
TG_metan_drugIndiv_tab$Pz <- TG_metan_drugIndiv[["pval.random.w"]]
TG_metan_drugIndiv_tab$weight <- TG_metan_drugIndiv[["w.random.w"]]
TG_metan_drugIndiv_tab$k <- TG_metan_drugIndiv[["k.w"]]
TG_metan_drugIndiv_tab$controls <- TG_metan_drugIndiv[["n.c.w"]]
TG_metan_drugIndiv_tab$experimental <- TG_metan_drugIndiv[["n.e.w"]]
TG_metan_drugIndiv_tab$Q <- TG_metan_drugIndiv[["Q.w"]]
TG_metan_drugIndiv_tab$Pq <- TG_metan_drugIndiv[["pval.Q.w"]]
TG_metan_drugIndiv_tab$tau <- TG_metan_drugIndiv[["tau.w"]]
TG_metan_drugIndiv_tab$I2 <- TG_metan_drugIndiv[["I2.w"]]
TG_metan_drugIndiv_tab <- TG_metan_drugIndiv_tab %>% rename(MD = TG_metan_drugIndiv...TE.random.w...)
TG_metan_drugIndiv_tab <- TG_metan_drugIndiv_tab[order(-TG_metan_drugIndiv_tab$MD),]
TG_metan_drugIndiv_tab <- TG_metan_drugIndiv_tab %>% mutate(row_number= 1:n())
TG_metan_drugIndiv_tab$subgroup <- "Subgroup"
TG_drugIndiv_sum_counts <- TG_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3)
TG_metan_drugIndiv_tab <- merge(TG_drugIndiv_sum_counts, TG_metan_drugIndiv_tab, by="drug")

TG_metan_drugIndiv_tab_overall <- data.frame(TG_metan_drugIndiv[["TE.random"]])
TG_metan_drugIndiv_tab_overall$drug <- "Overall"
TG_metan_drugIndiv_tab_overall$SE <- TG_metan_drugIndiv[["seTE.random"]]
TG_metan_drugIndiv_tab_overall$lower <- TG_metan_drugIndiv[["lower.random"]]
TG_metan_drugIndiv_tab_overall$upper <- TG_metan_drugIndiv[["upper.random"]]
TG_metan_drugIndiv_tab_overall$Pz <- TG_metan_drugIndiv[["pval.random"]]
TG_metan_drugIndiv_tab_overall$weight <- (max(TG_metan_drugIndiv_tab$weight)*2)
TG_metan_drugIndiv_tab_overall$k <- TG_metan_drugIndiv[["k"]]
TG_metan_drugIndiv_tab_overall$controls <- sum(TG_metan_drugIndiv_tab$controls)
TG_metan_drugIndiv_tab_overall$experimental <- sum(TG_metan_drugIndiv_tab$experimental)
TG_metan_drugIndiv_tab_overall$Q <- TG_metan_drugIndiv[["Q"]]
TG_metan_drugIndiv_tab_overall$Pq <- TG_metan_drugIndiv[["pval.Q"]]
TG_metan_drugIndiv_tab_overall$tau <- TG_metan_drugIndiv[["tau"]]
TG_metan_drugIndiv_tab_overall$I2 <- TG_metan_drugIndiv[["I2"]]
TG_metan_drugIndiv_tab_overall <- TG_metan_drugIndiv_tab_overall %>% rename(MD = TG_metan_drugIndiv...TE.random...)
TG_metan_drugIndiv_tab_overall$row_number <- ((nrow(TG_metan_drugIndiv_tab))+1)
TG_metan_drugIndiv_tab_overall$subgroup <- "Overall"
TG_metan_drugIndiv_tab_overall$n <- sum(TG_metan_drugIndiv_tab$n)
TG_metan_drugIndiv_sumtab <- rbind(TG_metan_drugIndiv_tab, TG_metan_drugIndiv_tab_overall)
TG_metan_drugIndiv_sumtab$weight <- as.numeric(TG_metan_drugIndiv_sumtab$weight)
TG_metan_drugIndiv_sumtab$row_number <- as.numeric(TG_metan_drugIndiv_sumtab$row_number)
TG_metan_drugIndiv_sumtab$subgroup <- as.factor(TG_metan_drugIndiv_sumtab$subgroup)
TG_metan_drugIndiv_sumtab$total = TG_metan_drugIndiv_sumtab$controls + TG_metan_drugIndiv_sumtab$experimental

TG_metan_drugIndiv_sumtab$text <- paste(format(round(TG_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(TG_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
TG_metan_drugIndiv_sumtab$text <- paste(TG_metan_drugIndiv_sumtab$text, format(round(TG_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
TG_metan_drugIndiv_sumtab$text <- paste(TG_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL)

TG_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(TG_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
TG_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(TG_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
TG_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(TG_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
TG_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(TG_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
TG_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(TG_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(TG_metan_drugIndiv_sumtab,file="TG_metan_drugIndiv_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(TG_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(TG_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(TG_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10")

overall_min = TG_metan_drugIndiv_tab_overall$lower
overall_max = TG_metan_drugIndiv_tab_overall$upper

TG_metan_drugIndiv_ybreaks <- nrow(TG_metan_drugIndiv_sumtab)
TG_metan_drugIndiv_sumtab <- TG_metan_drugIndiv_sumtab[order(TG_metan_drugIndiv_sumtab$row_number),]

TG_metan_drugIndiv_forest <- ggplot(data= TG_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: TG_metan_drugIndiv_ybreaks, labels = TG_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in hepatic triglyceride (%)") + scale_x_continuous(limits=c(-125, 150), breaks=seq(-75, 50, 25), expand=c(0,0)) + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=25, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-150, xmax=-75, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=TG_metan_drugIndiv_sumtab, aes(x=25, label=text), size = 3.5, hjust=0) + geom_text(data=TG_metan_drugIndiv_sumtab, aes(x=-115, label=k), size = 3.5, hjust=0) + geom_text(data=TG_metan_drugIndiv_sumtab, aes(x=-90, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-125, 75))

pdf(file="TG_metan_drugIndiv_forest.pdf",width=10,height=8)
TG_metan_drugIndiv_forest
dev.off()


########

## calculate sample size needed for average results
## mean comm_SD = TG_commSD_mean
## meta-analysis mean difference = TG_metan_class_main[["TE.random"]]
## calculate Cohen's d
TG_cohen_d = TG_metan_class_main[["TE.random"]] / TG_commSD_mean

TG_samplesize_av <- pwr.t.test(d = TG_cohen_d, power = 0.80, sig.level = 0.05)
## n = 16 - number in **each** group

## find number of studies with n > TG_samplesize_av

TG_data$total = TG_data$TG_Int_size + TG_data$TG_Pla_size

TG_pwrcount <- TG_data %>% group_by(total, Paper) %>% summarise(n = n())

TG_pwrcount_adequate = subset(TG_pwrcount, total >= 2*(TG_samplesize_av[["n"]]))
write.table(TG_pwrcount_adequate,file="TG_pwrcount_adequate.csv",sep=",")

########

## run meta-regressions on full TG dataset for continuous traits

TG_metan_full <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## create metan with >3 for each level of categorical variables

## Background

TG_bg_counts <- TG_data %>% group_by(Background_simple, Study) %>% summarise(n = n())
TG_bg_counts_sum <- TG_bg_counts %>% group_by(Background_simple) %>% summarise(n = n())

TG_bg_less3 = subset(TG_bg_counts_sum, n <3)
TG_bg_less3$Background_simple <- droplevels(TG_bg_less3$Background_simple)
TG_bg_droplist <- TG_bg_less3$Background_simple

TG_data_min3bg <- TG_data %>% filter(!Background_simple %in% TG_bg_droplist)

TG_metan_bg <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## Model 

TG_model_counts <- TG_data %>% group_by(Model_simple, Study) %>% summarise(n = n())
TG_model_counts_sum <- TG_model_counts %>% group_by(Model_simple) %>% summarise(n = n())

TG_model_less3 = subset(TG_model_counts_sum, n <3)
TG_model_less3$Model_simple <- droplevels(TG_model_less3$Model_simple)
TG_model_droplist <- TG_model_less3$Model_simple

TG_data_min3model <- TG_data %>% filter(!Model_simple %in% TG_model_droplist)

TG_metan_model <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## run metaregs

TG_reg_Qual_score <- metareg(TG_metan_full, Qual_score)
TG_reg_Qual_score_tab <- data.frame(TG_reg_Qual_score[["beta"]])
TG_reg_Qual_score_tab$se <- TG_reg_Qual_score[["se"]]
TG_reg_Qual_score_tab$pval <- TG_reg_Qual_score[["pval"]]
TG_reg_Qual_score_tab$beta <- TG_reg_Qual_score[["beta"]]
TG_reg_Qual_score_tab <- TG_reg_Qual_score_tab[-c(1),]
TG_reg_Qual_score_tab <- TG_reg_Qual_score_tab[-c(1)]
TG_reg_Qual_score_tab$k <- TG_reg_Qual_score[["k"]]
TG_reg_Qual_score_tab$r2 <- TG_reg_Qual_score[["R2"]]
TG_reg_Qual_score_tab$var <- "Qual_score"

TG_reg_Protocol <- metareg(TG_metan_full, Protocol)
TG_reg_Protocol_tab <- data.frame(TG_reg_Protocol[["beta"]])
TG_reg_Protocol_tab$se <- TG_reg_Protocol[["se"]]
TG_reg_Protocol_tab$pval <- TG_reg_Protocol[["pval"]]
TG_reg_Protocol_tab$beta <- TG_reg_Protocol[["beta"]]
TG_reg_Protocol_tab <- TG_reg_Protocol_tab[-c(1),]
TG_reg_Protocol_tab <- TG_reg_Protocol_tab[-c(1)]
TG_reg_Protocol_tab$k <- TG_reg_Protocol[["k"]]
TG_reg_Protocol_tab$r2 <- TG_reg_Protocol[["R2"]]
TG_reg_Protocol_tab$var <- "Protocol"

TG_reg_Randomisation <- metareg(TG_metan_full, Randomisation)
TG_reg_Randomisation_tab <- data.frame(TG_reg_Randomisation[["beta"]])
TG_reg_Randomisation_tab$se <- TG_reg_Randomisation[["se"]]
TG_reg_Randomisation_tab$pval <- TG_reg_Randomisation[["pval"]]
TG_reg_Randomisation_tab$beta <- TG_reg_Randomisation[["beta"]]
TG_reg_Randomisation_tab <- TG_reg_Randomisation_tab[-c(1),]
TG_reg_Randomisation_tab <- TG_reg_Randomisation_tab[-c(1)]
TG_reg_Randomisation_tab$k <- TG_reg_Randomisation[["k"]]
TG_reg_Randomisation_tab$r2 <- TG_reg_Randomisation[["R2"]]
TG_reg_Randomisation_tab$var <- "Randomisation"

TG_reg_Blinding <- metareg(TG_metan_full, Blinding)
TG_reg_Blinding_tab <- data.frame(TG_reg_Blinding[["beta"]])
TG_reg_Blinding_tab$se <- TG_reg_Blinding[["se"]]
TG_reg_Blinding_tab$pval <- TG_reg_Blinding[["pval"]]
TG_reg_Blinding_tab$beta <- TG_reg_Blinding[["beta"]]
TG_reg_Blinding_tab <- TG_reg_Blinding_tab[-c(1),]
TG_reg_Blinding_tab <- TG_reg_Blinding_tab[-c(1)]
TG_reg_Blinding_tab$k <- TG_reg_Blinding[["k"]]
TG_reg_Blinding_tab$r2 <- TG_reg_Blinding[["R2"]]
TG_reg_Blinding_tab$var <- "Blinding"

TG_reg_Power_calculation <- metareg(TG_metan_full, Power_calculation)
TG_reg_Power_calculation_tab <- data.frame(TG_reg_Power_calculation[["beta"]])
TG_reg_Power_calculation_tab$se <- TG_reg_Power_calculation[["se"]]
TG_reg_Power_calculation_tab$pval <- TG_reg_Power_calculation[["pval"]]
TG_reg_Power_calculation_tab$beta <- TG_reg_Power_calculation[["beta"]]
TG_reg_Power_calculation_tab <- TG_reg_Power_calculation_tab[-c(1),]
TG_reg_Power_calculation_tab <- TG_reg_Power_calculation_tab[-c(1)]
TG_reg_Power_calculation_tab$k <- TG_reg_Power_calculation[["k"]]
TG_reg_Power_calculation_tab$r2 <- TG_reg_Power_calculation[["R2"]]
TG_reg_Power_calculation_tab$var <- "Power_calculation"

TG_reg_Chol_per <- metareg(TG_metan_full, Chol_per)
TG_reg_Chol_per_tab <- data.frame(TG_reg_Chol_per[["beta"]])
TG_reg_Chol_per_tab$se <- TG_reg_Chol_per[["se"]]
TG_reg_Chol_per_tab$pval <- TG_reg_Chol_per[["pval"]]
TG_reg_Chol_per_tab$beta <- TG_reg_Chol_per[["beta"]]
TG_reg_Chol_per_tab <- TG_reg_Chol_per_tab[-c(1),]
TG_reg_Chol_per_tab <- TG_reg_Chol_per_tab[-c(1)]
TG_reg_Chol_per_tab$k <- TG_reg_Chol_per[["k"]]
TG_reg_Chol_per_tab$r2 <- TG_reg_Chol_per[["R2"]]
TG_reg_Chol_per_tab$var <- "Chol_per"

TG_reg_log_FructGluc_per <- metareg(TG_metan_full, log_FructGluc_per)
TG_reg_log_FructGluc_per_tab <- data.frame(TG_reg_log_FructGluc_per[["beta"]])
TG_reg_log_FructGluc_per_tab$se <- TG_reg_log_FructGluc_per[["se"]]
TG_reg_log_FructGluc_per_tab$pval <- TG_reg_log_FructGluc_per[["pval"]]
TG_reg_log_FructGluc_per_tab$beta <- TG_reg_log_FructGluc_per[["beta"]]
TG_reg_log_FructGluc_per_tab <- TG_reg_log_FructGluc_per_tab[-c(1),]
TG_reg_log_FructGluc_per_tab <- TG_reg_log_FructGluc_per_tab[-c(1)]
TG_reg_log_FructGluc_per_tab$k <- TG_reg_log_FructGluc_per[["k"]]
TG_reg_log_FructGluc_per_tab$r2 <- TG_reg_log_FructGluc_per[["R2"]]
TG_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per"

TG_reg_log_Sucr_kcal <- metareg(TG_metan_full, log_Sucr_kcal)
TG_reg_log_Sucr_kcal_tab <- data.frame(TG_reg_log_Sucr_kcal[["beta"]])
TG_reg_log_Sucr_kcal_tab$se <- TG_reg_log_Sucr_kcal[["se"]]
TG_reg_log_Sucr_kcal_tab$pval <- TG_reg_log_Sucr_kcal[["pval"]]
TG_reg_log_Sucr_kcal_tab$beta <- TG_reg_log_Sucr_kcal[["beta"]]
TG_reg_log_Sucr_kcal_tab <- TG_reg_log_Sucr_kcal_tab[-c(1),]
TG_reg_log_Sucr_kcal_tab <- TG_reg_log_Sucr_kcal_tab[-c(1)]
TG_reg_log_Sucr_kcal_tab$k <- TG_reg_log_Sucr_kcal[["k"]]
TG_reg_log_Sucr_kcal_tab$r2 <- TG_reg_log_Sucr_kcal[["R2"]]
TG_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal"

TG_reg_log_Fat_kcal <- metareg(TG_metan_full, log_Fat_kcal)
TG_reg_log_Fat_kcal_tab <- data.frame(TG_reg_log_Fat_kcal[["beta"]])
TG_reg_log_Fat_kcal_tab$se <- TG_reg_log_Fat_kcal[["se"]]
TG_reg_log_Fat_kcal_tab$pval <- TG_reg_log_Fat_kcal[["pval"]]
TG_reg_log_Fat_kcal_tab$beta <- TG_reg_log_Fat_kcal[["beta"]]
TG_reg_log_Fat_kcal_tab <- TG_reg_log_Fat_kcal_tab[-c(1),]
TG_reg_log_Fat_kcal_tab <- TG_reg_log_Fat_kcal_tab[-c(1)]
TG_reg_log_Fat_kcal_tab$k <- TG_reg_log_Fat_kcal[["k"]]
TG_reg_log_Fat_kcal_tab$r2 <- TG_reg_log_Fat_kcal[["R2"]]
TG_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal"

TG_reg_log_Age_start <- metareg(TG_metan_full, log_Age_start)
TG_reg_log_Age_start_tab <- data.frame(TG_reg_log_Age_start[["beta"]])
TG_reg_log_Age_start_tab$se <- TG_reg_log_Age_start[["se"]]
TG_reg_log_Age_start_tab$pval <- TG_reg_log_Age_start[["pval"]]
TG_reg_log_Age_start_tab$beta <- TG_reg_log_Age_start[["beta"]]
TG_reg_log_Age_start_tab <- TG_reg_log_Age_start_tab[-c(1),]
TG_reg_log_Age_start_tab <- TG_reg_log_Age_start_tab[-c(1)]
TG_reg_log_Age_start_tab$k <- TG_reg_log_Age_start[["k"]]
TG_reg_log_Age_start_tab$r2 <- TG_reg_log_Age_start[["R2"]]
TG_reg_log_Age_start_tab$var <- "log_Age_start"

TG_reg_log_Duration <- metareg(TG_metan_full, log_Duration)
TG_reg_log_Duration_tab <- data.frame(TG_reg_log_Duration[["beta"]])
TG_reg_log_Duration_tab$se <- TG_reg_log_Duration[["se"]]
TG_reg_log_Duration_tab$pval <- TG_reg_log_Duration[["pval"]]
TG_reg_log_Duration_tab$beta <- TG_reg_log_Duration[["beta"]]
TG_reg_log_Duration_tab <- TG_reg_log_Duration_tab[-c(1),]
TG_reg_log_Duration_tab <- TG_reg_log_Duration_tab[-c(1)]
TG_reg_log_Duration_tab$k <- TG_reg_log_Duration[["k"]]
TG_reg_log_Duration_tab$r2 <- TG_reg_log_Duration[["R2"]]
TG_reg_log_Duration_tab$var <- "log_Duration"

TG_reg_log_Age_end <- metareg(TG_metan_full, log_Age_end)
TG_reg_log_Age_end_tab <- data.frame(TG_reg_log_Age_end[["beta"]])
TG_reg_log_Age_end_tab$se <- TG_reg_log_Age_end[["se"]]
TG_reg_log_Age_end_tab$pval <- TG_reg_log_Age_end[["pval"]]
TG_reg_log_Age_end_tab$beta <- TG_reg_log_Age_end[["beta"]]
TG_reg_log_Age_end_tab <- TG_reg_log_Age_end_tab[-c(1),]
TG_reg_log_Age_end_tab <- TG_reg_log_Age_end_tab[-c(1)]
TG_reg_log_Age_end_tab$k <- TG_reg_log_Age_end[["k"]]
TG_reg_log_Age_end_tab$r2 <- TG_reg_log_Age_end[["R2"]]
TG_reg_log_Age_end_tab$var <- "log_Age_end"

TG_reg_log_Wt_change <- metareg(TG_metan_full, log_Wt_change)
TG_reg_log_Wt_change_tab <- data.frame(TG_reg_log_Wt_change[["beta"]])
TG_reg_log_Wt_change_tab$se <- TG_reg_log_Wt_change[["se"]]
TG_reg_log_Wt_change_tab$pval <- TG_reg_log_Wt_change[["pval"]]
TG_reg_log_Wt_change_tab$beta <- TG_reg_log_Wt_change[["beta"]]
TG_reg_log_Wt_change_tab <- TG_reg_log_Wt_change_tab[-c(1),]
TG_reg_log_Wt_change_tab <- TG_reg_log_Wt_change_tab[-c(1)]
TG_reg_log_Wt_change_tab$k <- TG_reg_log_Wt_change[["k"]]
TG_reg_log_Wt_change_tab$r2 <- TG_reg_log_Wt_change[["R2"]]
TG_reg_log_Wt_change_tab$var <- "log_Wt_change"

TG_reg_log_Gluc_change <- metareg(TG_metan_full, log_Gluc_change)
TG_reg_log_Gluc_change_tab <- data.frame(TG_reg_log_Gluc_change[["beta"]])
TG_reg_log_Gluc_change_tab$se <- TG_reg_log_Gluc_change[["se"]]
TG_reg_log_Gluc_change_tab$pval <- TG_reg_log_Gluc_change[["pval"]]
TG_reg_log_Gluc_change_tab$beta <- TG_reg_log_Gluc_change[["beta"]]
TG_reg_log_Gluc_change_tab <- TG_reg_log_Gluc_change_tab[-c(1),]
TG_reg_log_Gluc_change_tab <- TG_reg_log_Gluc_change_tab[-c(1)]
TG_reg_log_Gluc_change_tab$k <- TG_reg_log_Gluc_change[["k"]]
TG_reg_log_Gluc_change_tab$r2 <- TG_reg_log_Gluc_change[["R2"]]
TG_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

TG_reg_log_Insul_change <- metareg(TG_metan_full, log_Insul_change)
TG_reg_log_Insul_change_tab <- data.frame(TG_reg_log_Insul_change[["beta"]])
TG_reg_log_Insul_change_tab$se <- TG_reg_log_Insul_change[["se"]]
TG_reg_log_Insul_change_tab$pval <- TG_reg_log_Insul_change[["pval"]]
TG_reg_log_Insul_change_tab$beta <- TG_reg_log_Insul_change[["beta"]]
TG_reg_log_Insul_change_tab <- TG_reg_log_Insul_change_tab[-c(1),]
TG_reg_log_Insul_change_tab <- TG_reg_log_Insul_change_tab[-c(1)]
TG_reg_log_Insul_change_tab$k <- TG_reg_log_Insul_change[["k"]]
TG_reg_log_Insul_change_tab$r2 <- TG_reg_log_Insul_change[["R2"]]
TG_reg_log_Insul_change_tab$var <- "log_Insul_change"

TG_reg_Sex <- metareg(TG_metan_full, Sex)
TG_reg_Sex_tab <- data.frame(TG_reg_Sex[["beta"]])
TG_reg_Sex_tab$se <- TG_reg_Sex[["se"]]
TG_reg_Sex_tab$pval <- TG_reg_Sex[["pval"]]
TG_reg_Sex_tab$beta <- TG_reg_Sex[["beta"]]
TG_reg_Sex_tab <- TG_reg_Sex_tab[-c(1),]
TG_reg_Sex_tab <- TG_reg_Sex_tab[-c(1)]
TG_reg_Sex_tab$k <- TG_reg_Sex[["k"]]
TG_reg_Sex_tab$r2 <- NA
TG_reg_Sex_tab$var <- rownames(TG_reg_Sex_tab)
TG_reg_Sex_overall_tab <- data.frame(TG_reg_Sex[["QMp"]])
TG_reg_Sex_overall_tab$se <- NA
TG_reg_Sex_overall_tab$pval <- TG_reg_Sex[["QMp"]]
TG_reg_Sex_overall_tab$beta <- NA
TG_reg_Sex_overall_tab <- TG_reg_Sex_overall_tab[-c(1)]
TG_reg_Sex_overall_tab$k <- TG_reg_Sex[["k"]]
TG_reg_Sex_overall_tab$r2 <- TG_reg_Sex[["R2"]]
TG_reg_Sex_overall_tab$var <- "Sex_overall"
TG_reg_Sex_tab <- rbind(TG_reg_Sex_tab, TG_reg_Sex_overall_tab)

TG_reg_Drug_dose <- metareg(TG_metan_drugIndiv, Drug_dose)
TG_reg_Drug_dose_tab <- data.frame(TG_reg_Drug_dose[["beta"]])
TG_reg_Drug_dose_tab$se <- TG_reg_Drug_dose[["se"]]
TG_reg_Drug_dose_tab$pval <- TG_reg_Drug_dose[["pval"]]
TG_reg_Drug_dose_tab$beta <- TG_reg_Drug_dose[["beta"]]
TG_reg_Drug_dose_tab <- TG_reg_Drug_dose_tab[-c(1),]
TG_reg_Drug_dose_tab <- TG_reg_Drug_dose_tab[-c(1)]
TG_reg_Drug_dose_tab$k <- TG_reg_Drug_dose[["k"]]
TG_reg_Drug_dose_tab$r2 <- TG_reg_Drug_dose[["R2"]]
TG_reg_Drug_dose_tab$var <- "Drug_dose"

TG_reg_Indiv_drug_class_3 <- metareg(TG_metan_drugIndiv, Indiv_drug_class_3)
TG_reg_Indiv_drug_class_3_tab <- data.frame(TG_reg_Indiv_drug_class_3[["beta"]])
TG_reg_Indiv_drug_class_3_tab$se <- TG_reg_Indiv_drug_class_3[["se"]]
TG_reg_Indiv_drug_class_3_tab$pval <- TG_reg_Indiv_drug_class_3[["pval"]]
TG_reg_Indiv_drug_class_3_tab$beta <- TG_reg_Indiv_drug_class_3[["beta"]]
TG_reg_Indiv_drug_class_3_tab <- TG_reg_Indiv_drug_class_3_tab[-c(1),]
TG_reg_Indiv_drug_class_3_tab <- TG_reg_Indiv_drug_class_3_tab[-c(1)]
TG_reg_Indiv_drug_class_3_tab$k <- TG_reg_Indiv_drug_class_3[["k"]]
TG_reg_Indiv_drug_class_3_tab$r2 <- NA
TG_reg_Indiv_drug_class_3_tab$var <- rownames(TG_reg_Indiv_drug_class_3_tab)
TG_reg_Indiv_drug_class_3_overall_tab <- data.frame(TG_reg_Indiv_drug_class_3[["QMp"]])
TG_reg_Indiv_drug_class_3_overall_tab$se <- NA
TG_reg_Indiv_drug_class_3_overall_tab$pval <- TG_reg_Indiv_drug_class_3[["QMp"]]
TG_reg_Indiv_drug_class_3_overall_tab$beta <- NA
TG_reg_Indiv_drug_class_3_overall_tab <- TG_reg_Indiv_drug_class_3_overall_tab[-c(1)]
TG_reg_Indiv_drug_class_3_overall_tab$k <- TG_reg_Indiv_drug_class_3[["k"]]
TG_reg_Indiv_drug_class_3_overall_tab$r2 <- TG_reg_Indiv_drug_class_3[["R2"]]
TG_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall"
TG_reg_Indiv_drug_class_3_tab <- rbind(TG_reg_Indiv_drug_class_3_tab, TG_reg_Indiv_drug_class_3_overall_tab)

TG_reg_Model_simple <- metareg(TG_metan_model, Model_simple)
TG_reg_Model_simple_tab <- data.frame(TG_reg_Model_simple[["beta"]])
TG_reg_Model_simple_tab$se <- TG_reg_Model_simple[["se"]]
TG_reg_Model_simple_tab$pval <- TG_reg_Model_simple[["pval"]]
TG_reg_Model_simple_tab$beta <- TG_reg_Model_simple[["beta"]]
TG_reg_Model_simple_tab <- TG_reg_Model_simple_tab[-c(1),]
TG_reg_Model_simple_tab <- TG_reg_Model_simple_tab[-c(1)]
TG_reg_Model_simple_tab$k <- TG_reg_Model_simple[["k"]]
TG_reg_Model_simple_tab$r2 <- NA
TG_reg_Model_simple_tab$var <- rownames(TG_reg_Model_simple_tab)
TG_reg_Model_simple_overall_tab <- data.frame(TG_reg_Model_simple[["QMp"]])
TG_reg_Model_simple_overall_tab$se <- NA
TG_reg_Model_simple_overall_tab$pval <- TG_reg_Model_simple[["QMp"]]
TG_reg_Model_simple_overall_tab$beta <- NA
TG_reg_Model_simple_overall_tab <- TG_reg_Model_simple_overall_tab[-c(1)]
TG_reg_Model_simple_overall_tab$k <- TG_reg_Model_simple[["k"]]
TG_reg_Model_simple_overall_tab$r2 <- TG_reg_Model_simple[["R2"]]
TG_reg_Model_simple_overall_tab$var <- "Model_simple_overall"
TG_reg_Model_simple_tab <- rbind(TG_reg_Model_simple_tab, TG_reg_Model_simple_overall_tab)

TG_reg_Background_simple <- metareg(TG_metan_bg, Background_simple)
TG_reg_Background_simple_tab <- data.frame(TG_reg_Background_simple[["beta"]])
TG_reg_Background_simple_tab$se <- TG_reg_Background_simple[["se"]]
TG_reg_Background_simple_tab$pval <- TG_reg_Background_simple[["pval"]]
TG_reg_Background_simple_tab$beta <- TG_reg_Background_simple[["beta"]]
TG_reg_Background_simple_tab <- TG_reg_Background_simple_tab[-c(1),]
TG_reg_Background_simple_tab <- TG_reg_Background_simple_tab[-c(1)]
TG_reg_Background_simple_tab$k <- TG_reg_Background_simple[["k"]]
TG_reg_Background_simple_tab$r2 <- NA
TG_reg_Background_simple_tab$var <- rownames(TG_reg_Background_simple_tab)
TG_reg_Background_simple_overall_tab <- data.frame(TG_reg_Background_simple[["QMp"]])
TG_reg_Background_simple_overall_tab$se <- NA
TG_reg_Background_simple_overall_tab$pval <- TG_reg_Background_simple[["QMp"]]
TG_reg_Background_simple_overall_tab$beta <- NA
TG_reg_Background_simple_overall_tab <- TG_reg_Background_simple_overall_tab[-c(1)]
TG_reg_Background_simple_overall_tab$k <- TG_reg_Background_simple[["k"]]
TG_reg_Background_simple_overall_tab$r2 <- TG_reg_Background_simple[["R2"]]
TG_reg_Background_simple_overall_tab$var <- "Background_simple_overall"
TG_reg_Background_simple_tab <- rbind(TG_reg_Background_simple_tab, TG_reg_Background_simple_overall_tab)

TG_metareg_sumtab <- rbind(TG_reg_Qual_score_tab, TG_reg_Protocol_tab, TG_reg_Randomisation_tab, TG_reg_Blinding_tab, TG_reg_Power_calculation_tab, TG_reg_Chol_per_tab, TG_reg_log_FructGluc_per_tab, TG_reg_log_Sucr_kcal_tab, TG_reg_log_Fat_kcal_tab, TG_reg_log_Age_start_tab, TG_reg_log_Duration_tab, TG_reg_log_Age_end_tab, TG_reg_log_Wt_change_tab, TG_reg_log_Gluc_change_tab, TG_reg_log_Insul_change_tab, TG_reg_Sex_tab, TG_reg_Drug_dose_tab, TG_reg_Indiv_drug_class_3_tab, TG_reg_Model_simple_tab, TG_reg_Background_simple_tab)

TG_metareg_sumtab$text <- paste(format(round(TG_metareg_sumtab$beta, 1), nsmall = 1), format(round(TG_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
TG_metareg_sumtab$text <- paste(TG_metareg_sumtab$text, "", sep = ")", collapse = NULL)
TG_metareg_sumtab$pval_2dig <- paste((signif(TG_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
TG_metareg_sumtab$r2_2dig <- paste(format(round(TG_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(TG_metareg_sumtab,file="TG_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="TG_bubble_Wt_change.pdf",width=6,height=6)
TG_bubble_Wt_change <- bubble(TG_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in hepatic triglyceride content (%)", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-100,200), xlim = c(-.8, .6))
TG_bubble_Wt_change
dev.off()

pdf(file="TG_bubble_Insul_change.pdf",width=6,height=6)
TG_bubble_Insul_change <- bubble(TG_reg_log_Insul_change, xlab = "Log fasting insulin difference intervention/placebo", ylab = "Mean difference in hepatic triglyceride content (%)", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-100,200), xlim = c(-3, 2))
TG_bubble_Insul_change
dev.off()

####

####

## re-examine for evidence of drug dose effect only where there are at least 10 studies for each drug

TG_multimetareg_data_drugcounts10 <- TG_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n())
TG_multimetareg_data_drugcounts10_sum <- TG_multimetareg_data_drugcounts10 %>% group_by(Indiv_drug_class_3) %>% summarise(n = n())

TG_multimetareg_data_drugcounts_less10 = subset(TG_multimetareg_data_drugcounts10_sum, n <10)
TG_multimetareg_data_drugcounts_less10$Indiv_drug_class_3 <- droplevels(TG_multimetareg_data_drugcounts_less10$Indiv_drug_class_3)
TG_multimetareg_data_drug10_droplist <- TG_multimetareg_data_drugcounts_less10$Indiv_drug_class_3

TG_multimetareg_data_drug10 <- TG_data %>% filter(!Indiv_drug_class_3 %in% TG_multimetareg_data_drug10_droplist)

# Run metan

TG_metan_drug10 <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_multimetareg_data_drug10, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

TG_reg_Drug10_dose <- metareg(TG_metan_drug10, Drug_dose)
TG_reg_Drug10_dose


##########

##### run multiple meta-regression

## create data subset including >3 for each model >3 for background, and >3 for each drug

## start with dataset containing >3 for each background = TG_data_min3bg

TG_data_min3bg_modelcounts <- TG_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
TG_data_min3bg_modelcounts_sum <- TG_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

TG_data_min3bg_model_less3 = subset(TG_data_min3bg_modelcounts_sum, n <3)
TG_data_min3bg_model_less3$Model_simple <- droplevels(TG_data_min3bg_model_less3$Model_simple)
TG_data_min3bg_model_droplist <- TG_data_min3bg_model_less3$Model_simple

TG_multimetareg_data <- TG_data_min3bg %>% filter(!Model_simple %in% TG_data_min3bg_model_droplist)



## run multiple meta-regression

## create data subset including >3 for each model and >3 for background

## start with dataset containing >3 for each background = TG_data_min3bg

TG_data_min3bg_modelcounts <- TG_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
TG_data_min3bg_modelcounts_sum <- TG_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

TG_data_min3bg_model_less3 = subset(TG_data_min3bg_modelcounts_sum, n <3)
TG_data_min3bg_model_less3$Model_simple <- droplevels(TG_data_min3bg_model_less3$Model_simple)
TG_data_min3bg_model_droplist <- TG_data_min3bg_model_less3$Model_simple

TG_multimetareg_data <- TG_data_min3bg %>% filter(!Model_simple %in% TG_data_min3bg_model_droplist)

## Run metan

TG_multimetareg_metan <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")


library(metafor)

TG_multmetareg_tab <- data.frame(TG_multimetareg_metan$studlab)
TG_multmetareg_tab$yi <- TG_multimetareg_metan[["TE"]]
TG_multmetareg_tab$sei <- TG_multimetareg_metan[["seTE"]]
TG_multmetareg_tab$Model_simple <- TG_multimetareg_metan[["data"]][["Model_simple"]]
TG_multmetareg_tab$Background_simple <- TG_multimetareg_metan[["data"]][["Background_simple"]]
TG_multmetareg_tab$Sex <- TG_multimetareg_metan[["data"]][["Sex"]]
TG_multmetareg_tab$Indiv_drug_class_3 <- TG_multimetareg_metan[["data"]][["Indiv_drug_class_3"]]
TG_multmetareg_tab$log_Fat_kcal <- TG_multimetareg_metan[["data"]][["log_Fat_kcal"]]
TG_multmetareg_tab$log_Age_start <- TG_multimetareg_metan[["data"]][["log_Age_start"]]
TG_multmetareg_tab$log_Age_end <- TG_multimetareg_metan[["data"]][["log_Age_end"]]
TG_multmetareg_tab$log_Duration <- TG_multimetareg_metan[["data"]][["log_Duration"]]
TG_multmetareg_tab$log_Wt_change <- TG_multimetareg_metan[["data"]][["log_Wt_change"]]
TG_multmetareg_tab$log_Gluc_change <- TG_multimetareg_metan[["data"]][["log_Gluc_change"]]
TG_multmetareg_tab$log_Insul_change <- TG_multimetareg_metan[["data"]][["log_Insul_change"]]
TG_multmetareg_tab$Qual_score <- TG_multimetareg_metan[["data"]][["Qual_score"]]

TG_multmetareg_tab_cor <- cor(TG_multmetareg_tab[,8:15], use="complete.obs")
TG_multmetareg_tab_cor

library(PerformanceAnalytics)
chart.Correlation(TG_multmetareg_tab[,8:15], use="complete.obs")

## high correlation between age_start, age,_end, and duration, therefore drop age_end from model

library(dmetar)

TG_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = TG_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Insul_change", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE)
TG_multi_intereference1

sink("TG_multi_intereference1.txt")
print(TG_multi_intereference1)
sink()

## run multi-metareg for top model

TG_multmetareg_1 <- rma(yi = yi, sei = sei, data = TG_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + log_Age_start + log_Wt_change + Background_simple + log_Gluc_change + log_Insul_change + Model_simple + log_Duration + Qual_score, test="knha")

TG_multmetareg_1_tab <- coef(summary(TG_multmetareg_1))
TG_multmetareg_1_tab$rownames <- rownames(TG_multmetareg_1_tab)

TG_multmetareg_1_tab$mod1_text <- paste(format(round(TG_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(TG_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
TG_multmetareg_1_tab$mod1_text <- paste(TG_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL)
TG_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(TG_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL)

## check robustness using permutation test

TG_multmetareg_1_permut <- permutest(TG_multmetareg_1)

sink("TG_multmetareg_1_permut.txt")
print(TG_multmetareg_1_permut)
sink()


####

## repeat but also include drug in model, therefore drop where <3 unique studies for any drug class

TG_multimetareg_data_drugcounts <- TG_multimetareg_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n())
TG_multimetareg_data_drugcounts_sum <- TG_multimetareg_data_drugcounts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n())

TG_multimetareg_data_drugcounts_less3 = subset(TG_multimetareg_data_drugcounts_sum, n <3)
TG_multimetareg_data_drugcounts_less3$Indiv_drug_class_3 <- droplevels(TG_multimetareg_data_drugcounts_less3$Indiv_drug_class_3)
TG_multimetareg_data_drug_droplist <- TG_multimetareg_data_drugcounts_less3$Indiv_drug_class_3

TG_multimetareg_data_2 <- TG_multimetareg_data %>% filter(!Indiv_drug_class_3 %in% TG_multimetareg_data_drug_droplist)


## Run metan

TG_multimetareg_metan_2 <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_multimetareg_data_2, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

library(metafor)

TG_multmetareg_tab_2 <- data.frame(TG_multimetareg_metan_2$studlab)
TG_multmetareg_tab_2$yi <- TG_multimetareg_metan_2[["TE"]]
TG_multmetareg_tab_2$sei <- TG_multimetareg_metan_2[["seTE"]]
TG_multmetareg_tab_2$Model_simple <- TG_multimetareg_metan_2[["data"]][["Model_simple"]]
TG_multmetareg_tab_2$Background_simple <- TG_multimetareg_metan_2[["data"]][["Background_simple"]]
TG_multmetareg_tab_2$Sex <- TG_multimetareg_metan_2[["data"]][["Sex"]]
TG_multmetareg_tab_2$Indiv_drug_class_3 <- TG_multimetareg_metan_2[["data"]][["Indiv_drug_class_3"]]
TG_multmetareg_tab_2$log_Fat_kcal <- TG_multimetareg_metan_2[["data"]][["log_Fat_kcal"]]
TG_multmetareg_tab_2$log_Age_start <- TG_multimetareg_metan_2[["data"]][["log_Age_start"]]
TG_multmetareg_tab_2$log_Age_end <- TG_multimetareg_metan_2[["data"]][["log_Age_end"]]
TG_multmetareg_tab_2$log_Duration <- TG_multimetareg_metan_2[["data"]][["log_Duration"]]
TG_multmetareg_tab_2$log_Wt_change <- TG_multimetareg_metan_2[["data"]][["log_Wt_change"]]
TG_multmetareg_tab_2$log_Gluc_change <- TG_multimetareg_metan_2[["data"]][["log_Gluc_change"]]
TG_multmetareg_tab_2$log_Insul_change <- TG_multimetareg_metan_2[["data"]][["log_Insul_change"]]
TG_multmetareg_tab_2$Qual_score <- TG_multimetareg_metan_2[["data"]][["Qual_score"]]

TG_multmetareg_tab_2_cor <- cor(TG_multmetareg_tab_2[,8:15], use="complete.obs")
TG_multmetareg_tab_2_cor

library(PerformanceAnalytics)
chart.Correlation(TG_multmetareg_tab_2[,8:15], use="complete.obs")

## high correlation between age_start, age,_end, and duration, therefore drop age_end from model

library(dmetar)

TG_multi_intereference2 <- multimodel.inference(TE = "yi", seTE = "sei", data = TG_multmetareg_tab_2, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Insul_change", "log_Gluc_change", "Model_simple", "Background_simple", "Indiv_drug_class_3"), interaction = FALSE)
TG_multi_intereference2


## run multi-metareg for top model

TG_multmetareg_2 <- rma(yi = yi, sei = sei, data = TG_multmetareg_tab_2, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + log_Gluc_change + log_Insul_change + Indiv_drug_class_3 + Background_simple + log_Age_start, test="knha")

TG_multmetareg_2_tab <- coef(summary(TG_multmetareg_2))
TG_multmetareg_2_tab$rownames <- rownames(TG_multmetareg_2_tab)

TG_multmetareg_2_tab$mod2_text <- paste(format(round(TG_multmetareg_2_tab$estimate, 1), nsmall = 1), format(round(TG_multmetareg_2_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
TG_multmetareg_2_tab$mod2_text <- paste(TG_multmetareg_2_tab$mod2_text, "", sep = ")", collapse = NULL)
TG_multmetareg_2_tab$mod2_pval_2dig <- paste((signif(TG_multmetareg_2_tab$pval, digits=2)), "", sep = "", collapse = NULL)

TG_multmetareg_sumtab <- merge(TG_multmetareg_1_tab, TG_multmetareg_2_tab, by="rownames", all=TRUE)
write.table(TG_multmetareg_sumtab, "TG_multmetareg_sumtab.csv", sep=",")

## check robustness using permutation test

TG_multmetareg_2_permut <- permutest(TG_multmetareg_2)

sink("TG_multmetareg_2_permut.txt")
print(TG_multmetareg_2_permut)
sink()



## See if meta-regression results change after removal of weight-loss diets

library(tidyverse)

TG_NoWtLoss_data <- TG_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD')


TG_NoWtLoss_metan_full <- metacont(TG_Int_size, TG_Int_Mean, TG_Int_SD, TG_Pla_size, TG_Pla_Mean, TG_Pla_SD, data = TG_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

TG_NoWtLoss_reg_log_Wt_change <- metareg(TG_NoWtLoss_metan_full, log_Wt_change)
TG_NoWtLoss_reg_log_Wt_change_tab <- data.frame(TG_NoWtLoss_reg_log_Wt_change[["beta"]])
TG_NoWtLoss_reg_log_Wt_change_tab$se <- TG_NoWtLoss_reg_log_Wt_change[["se"]]
TG_NoWtLoss_reg_log_Wt_change_tab$pval <- TG_NoWtLoss_reg_log_Wt_change[["pval"]]
TG_NoWtLoss_reg_log_Wt_change_tab$beta <- TG_NoWtLoss_reg_log_Wt_change[["beta"]]
TG_NoWtLoss_reg_log_Wt_change_tab <- TG_NoWtLoss_reg_log_Wt_change_tab[-c(1),]
TG_NoWtLoss_reg_log_Wt_change_tab <- TG_NoWtLoss_reg_log_Wt_change_tab[-c(1)]
TG_NoWtLoss_reg_log_Wt_change_tab$k <- TG_NoWtLoss_reg_log_Wt_change[["k"]]
TG_NoWtLoss_reg_log_Wt_change_tab$r2 <- TG_NoWtLoss_reg_log_Wt_change[["R2"]]
TG_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change"

TG_NoWtLoss_reg_log_Gluc_change <- metareg(TG_NoWtLoss_metan_full, log_Gluc_change)
TG_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(TG_NoWtLoss_reg_log_Gluc_change[["beta"]])
TG_NoWtLoss_reg_log_Gluc_change_tab$se <- TG_NoWtLoss_reg_log_Gluc_change[["se"]]
TG_NoWtLoss_reg_log_Gluc_change_tab$pval <- TG_NoWtLoss_reg_log_Gluc_change[["pval"]]
TG_NoWtLoss_reg_log_Gluc_change_tab$beta <- TG_NoWtLoss_reg_log_Gluc_change[["beta"]]
TG_NoWtLoss_reg_log_Gluc_change_tab <- TG_NoWtLoss_reg_log_Gluc_change_tab[-c(1),]
TG_NoWtLoss_reg_log_Gluc_change_tab <- TG_NoWtLoss_reg_log_Gluc_change_tab[-c(1)]
TG_NoWtLoss_reg_log_Gluc_change_tab$k <- TG_NoWtLoss_reg_log_Gluc_change[["k"]]
TG_NoWtLoss_reg_log_Gluc_change_tab$r2 <- TG_NoWtLoss_reg_log_Gluc_change[["R2"]]
TG_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

TG_NoWtLoss_reg_log_Insul_change <- metareg(TG_NoWtLoss_metan_full, log_Insul_change)
TG_NoWtLoss_reg_log_Insul_change_tab <- data.frame(TG_NoWtLoss_reg_log_Insul_change[["beta"]])
TG_NoWtLoss_reg_log_Insul_change_tab$se <- TG_NoWtLoss_reg_log_Insul_change[["se"]]
TG_NoWtLoss_reg_log_Insul_change_tab$pval <- TG_NoWtLoss_reg_log_Insul_change[["pval"]]
TG_NoWtLoss_reg_log_Insul_change_tab$beta <- TG_NoWtLoss_reg_log_Insul_change[["beta"]]
TG_NoWtLoss_reg_log_Insul_change_tab <- TG_NoWtLoss_reg_log_Insul_change_tab[-c(1),]
TG_NoWtLoss_reg_log_Insul_change_tab <- TG_NoWtLoss_reg_log_Insul_change_tab[-c(1)]
TG_NoWtLoss_reg_log_Insul_change_tab$k <- TG_NoWtLoss_reg_log_Insul_change[["k"]]
TG_NoWtLoss_reg_log_Insul_change_tab$r2 <- TG_NoWtLoss_reg_log_Insul_change[["R2"]]
TG_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change"

TG_NoWtLoss_metareg_sumtab <- rbind(TG_NoWtLoss_reg_log_Wt_change_tab, TG_NoWtLoss_reg_log_Gluc_change_tab, TG_NoWtLoss_reg_log_Insul_change_tab)

TG_NoWtLoss_metareg_sumtab$text <- paste(format(round(TG_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(TG_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
TG_NoWtLoss_metareg_sumtab$text <- paste(TG_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL)
TG_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(TG_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
TG_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(TG_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(TG_NoWtLoss_metareg_sumtab,file="TG_NoWtLoss_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="TG_NoWtLoss_bubble_weight_change.pdf",width=6,height=6)
TG_NoWtLoss_bubble_weight_change <- bubble(TG_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-150, 200), xlim = c(-1,1))
TG_NoWtLoss_bubble_weight_change
dev.off()


pdf(file="TG_NoWtLoss_bubble_gluc_change.pdf",width=6,height=6)
TG_NoWtLoss_bubble_gluc_change <- bubble(TG_NoWtLoss_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
TG_NoWtLoss_bubble_gluc_change
dev.off()

pdf(file="TG_NoWtLoss_bubble_Insul_change.pdf",width=6,height=6)
TG_NoWtLoss_bubble_Insul_change <- bubble(TG_NoWtLoss_reg_log_Insul_change, xlab = "Log fasting insulin difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-3,3), ylim = c(-150, 200))
TG_NoWtLoss_bubble_Insul_change
dev.off()




########

## Assess impact of each drug on weight, glucose, and inuslin after removal of weightloss models

full_NoWtLoss_data <- full_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD')

DrugClass_Wt <- full_NoWtLoss_data %>% group_by(Drug_Class_new_1_all) %>% summarise(mean_Wt_change = mean(Wt_change, na.rm = TRUE), sd_Wt_change = sd(Wt_change, na.rm = TRUE), n = n()) %>%  mutate(se_Wt_change = sd_Wt_change / sqrt(n), lower_ci_Wt_change = mean_Wt_change - qt(1 - (0.05 / 2), n - 1) * se_Wt_change, upper_ci_Wt_change = mean_Wt_change + qt(1 - (0.05 / 2), n - 1) * se_Wt_change)
DrugClass_Wt$mean_Wt_change <- format(round(DrugClass_Wt$mean_Wt_change, 2), nsmall = 2)
DrugClass_Wt$sd_Wt_change <- format(round(DrugClass_Wt$sd_Wt_change, 2), nsmall = 2)
DrugClass_Wt$lower_ci_Wt_change <- format(round(DrugClass_Wt$lower_ci_Wt_change, 2), nsmall = 2)
DrugClass_Wt$upper_ci_Wt_change <- format(round(DrugClass_Wt$upper_ci_Wt_change, 2), nsmall = 2)

DrugClass_Gluc <- full_NoWtLoss_data %>% group_by(Drug_Class_new_1_all) %>% summarise(mean_Gluc_change = mean(Gluc_change, na.rm = TRUE), sd_Gluc_change = sd(Gluc_change, na.rm = TRUE), n = n()) %>%  mutate(se_Gluc_change = sd_Gluc_change / sqrt(n), lower_ci_Gluc_change = mean_Gluc_change - qt(1 - (0.05 / 2), n - 1) * se_Gluc_change, upper_ci_Gluc_change = mean_Gluc_change + qt(1 - (0.05 / 2), n - 1) * se_Gluc_change)
DrugClass_Gluc$mean_Gluc_change <- format(round(DrugClass_Gluc$mean_Gluc_change, 2), nsmall = 2)
DrugClass_Gluc$sd_Gluc_change <- format(round(DrugClass_Gluc$sd_Gluc_change, 2), nsmall = 2)
DrugClass_Gluc$lower_ci_Gluc_change <- format(round(DrugClass_Gluc$lower_ci_Gluc_change, 2), nsmall = 2)
DrugClass_Gluc$upper_ci_Gluc_change <- format(round(DrugClass_Gluc$upper_ci_Gluc_change, 2), nsmall = 2)

DrugClass_Insul <- full_NoWtLoss_data %>% group_by(Drug_Class_new_1_all) %>% summarise(mean_Insul_change = mean(Insul_change, na.rm = TRUE), sd_Insul_change = sd(Insul_change, na.rm = TRUE), n = n()) %>%  mutate(se_Insul_change = sd_Insul_change / sqrt(n), lower_ci_Insul_change = mean_Insul_change - qt(1 - (0.05 / 2), n - 1) * se_Insul_change, upper_ci_Insul_change = mean_Insul_change + qt(1 - (0.05 / 2), n - 1) * se_Insul_change)
DrugClass_Insul$mean_Insul_change <- format(round(DrugClass_Insul$mean_Insul_change, 2), nsmall = 2)
DrugClass_Insul$sd_Insul_change <- format(round(DrugClass_Insul$sd_Insul_change, 2), nsmall = 2)
DrugClass_Insul$lower_ci_Insul_change <- format(round(DrugClass_Insul$lower_ci_Insul_change, 2), nsmall = 2)
DrugClass_Insul$upper_ci_Insul_change <- format(round(DrugClass_Insul$upper_ci_Insul_change, 2), nsmall = 2)

DrugClass_summary <- cbind(DrugClass_Wt, DrugClass_Gluc, DrugClass_Insul)
DrugClass_summary_tab = subset(DrugClass_summary, select = c("Drug_Class_new_1_all", "mean_Wt_change", "sd_Wt_change", "lower_ci_Wt_change", "upper_ci_Wt_change", "mean_Gluc_change", "sd_Gluc_change", "lower_ci_Gluc_change", "upper_ci_Gluc_change", "mean_Insul_change", "sd_Insul_change", "lower_ci_Insul_change", "upper_ci_Insul_change", "n"))

write.table(DrugClass_summary_tab, file="DrugClass_summary_tab.csv", sep=",")

### make figures for each

library(ggplot2)
library(forcats)

DrugClass_Wt_data <- full_NoWtLoss_data %>% drop_na(Wt_change)

## drop where <3 data points for each drug class for _Wt
DrugClass_Wt_counts <- DrugClass_Wt_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
DrugClass_Wt_counts_sum <- DrugClass_Wt_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

DrugClass_Wt_less3 = subset(DrugClass_Wt_counts_sum, n <3)
DrugClass_Wt_less3$Drug_Class_new_1_all <- droplevels(DrugClass_Wt_less3$Drug_Class_new_1_all)
DrugClass_Wt_droplist <- DrugClass_Wt_less3$Drug_Class_new_1_all

DrugClass_Wt_min2class <- DrugClass_Wt_data %>% filter(!Drug_Class_new_1_all %in% DrugClass_Wt_droplist)
DrugClass_Wt_min2class$Drug_Class_new_1_all <- droplevels(DrugClass_Wt_min2class$Drug_Class_new_1_all)

DrugClass_Wt_box <- ggplot(data=DrugClass_Wt_min2class, aes(x=fct_reorder(Drug_Class_new_1_all, Wt_change, .fun = median, .desc =TRUE), y=Wt_change, colour=Drug_Class_new_1_all)) + geom_hline(yintercept=1, linetype="dashed", color = "black", size=0.2, alpha=0.4) + geom_boxplot(outlier.shape=NA, aes(fill=Drug_Class_new_1_all), alpha=0.2, show.legend=FALSE) + ylab("Interventional/placebo \n weight difference") + theme_classic() + theme(axis.title.y=element_text(size=12, angle=0, vjust=0.5), axis.text.x=element_text(size=10, angle = 45, hjust = 1)) + xlab("") + geom_point(aes(colour=Drug_Class_new_1_all), size=0.6, alpha=0.3, show.legend=FALSE) + scale_y_continuous(limits=c(0.4, 1.2), breaks=seq(0.4, 1.2, .2)) + coord_cartesian(ylim = c(.6, 1.2)) 
DrugClass_Wt_box

pdf(file="DrugClass_Wt_box.pdf",width=12,height=6)
DrugClass_Wt_box
dev.off()

## for glucose

DrugClass_Gluc_data <- full_NoWtLoss_data %>% drop_na(Gluc_change)

## drop where <3 data points for each drug class for _Gluc
DrugClass_Gluc_counts <- DrugClass_Gluc_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
DrugClass_Gluc_counts_sum <- DrugClass_Gluc_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

DrugClass_Gluc_less3 = subset(DrugClass_Gluc_counts_sum, n <3)
DrugClass_Gluc_less3$Drug_Class_new_1_all <- droplevels(DrugClass_Gluc_less3$Drug_Class_new_1_all)
DrugClass_Gluc_droplist <- DrugClass_Gluc_less3$Drug_Class_new_1_all

DrugClass_Gluc_min2class <- DrugClass_Gluc_data %>% filter(!Drug_Class_new_1_all %in% DrugClass_Gluc_droplist)
DrugClass_Gluc_min2class$Drug_Class_new_1_all <- droplevels(DrugClass_Gluc_min2class$Drug_Class_new_1_all)

DrugClass_Gluc_box <- ggplot(data=DrugClass_Gluc_min2class, aes(x=fct_reorder(Drug_Class_new_1_all, Gluc_change, .fun = median, .desc =TRUE), y=Gluc_change, colour=Drug_Class_new_1_all)) + geom_hline(yintercept=1, linetype="dashed", color = "black", size=0.2, alpha=0.4) + geom_boxplot(outlier.shape=NA, aes(fill=Drug_Class_new_1_all), alpha=0.2, show.legend=FALSE) + ylab("Interventional/placebo \n fasting glucose difference") + theme_classic() + theme(axis.title.y=element_text(size=12, angle=0, vjust=0.5), axis.text.x=element_text(size=10, angle = 45, hjust = 1)) + xlab("") + geom_point(aes(colour=Drug_Class_new_1_all), size=0.6, alpha=0.3, show.legend=FALSE) + scale_y_continuous(limits=c(0.2, 1.6), breaks=seq(0.2, 1.6, .2)) + coord_cartesian(ylim = c(.3, 1.4))

pdf(file="DrugClass_Gluc_box.pdf",width=12,height=6)
DrugClass_Gluc_box
dev.off()


## for insulin

DrugClass_Insul_data <- full_NoWtLoss_data %>% drop_na(Insul_change)

## drop where <3 data points for each drug class for _Insul
DrugClass_Insul_counts <- DrugClass_Insul_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
DrugClass_Insul_counts_sum <- DrugClass_Insul_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

DrugClass_Insul_less3 = subset(DrugClass_Insul_counts_sum, n <3)
DrugClass_Insul_less3$Drug_Class_new_1_all <- droplevels(DrugClass_Insul_less3$Drug_Class_new_1_all)
DrugClass_Insul_droplist <- DrugClass_Insul_less3$Drug_Class_new_1_all

DrugClass_Insul_min2class <- DrugClass_Insul_data %>% filter(!Drug_Class_new_1_all %in% DrugClass_Insul_droplist)
DrugClass_Insul_min2class$Drug_Class_new_1_all <- droplevels(DrugClass_Insul_min2class$Drug_Class_new_1_all)

DrugClass_Insul_box <- ggplot(data=DrugClass_Insul_min2class, aes(x=fct_reorder(Drug_Class_new_1_all, Insul_change, .fun = median, .desc =TRUE), y=Insul_change, colour=Drug_Class_new_1_all)) + geom_hline(yintercept=1, linetype="dashed", color = "black", size=0.2, alpha=0.4) + geom_boxplot(outlier.shape=NA, aes(fill=Drug_Class_new_1_all), alpha=0.2, show.legend=FALSE) + ylab("Interventional/placebo \n fasting insulin difference") + theme_classic() + theme(axis.title.y=element_text(size=12, angle=0, vjust=0.5), axis.text.x=element_text(size=10, angle = 45, hjust = 1)) + xlab("") + geom_point(aes(colour=Drug_Class_new_1_all), size=0.6, alpha=0.3, show.legend=FALSE) + scale_y_continuous(limits=c(0.2, 4), breaks=seq(0.2, 4, .2)) + coord_cartesian(ylim = c(.2, 1.5))

pdf(file="DrugClass_Insul_box.pdf",width=12,height=6)
DrugClass_Insul_box
dev.off()

##########

#### Steatosis analysis


## following on from TG analysis

setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/Stea_out")

########

## Analysis for histological steatosis grade (Stea)

########


## Power analysis
library(pwr)

## calculate common SD
full_data$Stea_Int_SD2 <- full_data$Stea_Int_SD*full_data$Stea_Int_SD
full_data$Stea_Pla_SD2 <- full_data$Stea_Pla_SD*full_data$Stea_Pla_SD
full_data$Stea_comm_SD <- sqrt(((full_data$Stea_Int_SD2+full_data$Stea_Pla_SD2)/2))
full_data$Stea_m_diff <- full_data$Stea_Pla_Mean-full_data$Stea_Int_Mean
full_data$Stea_eff_size <- full_data$Stea_m_diff/full_data$Stea_comm_SD

library(tidyr)

Stea_data <- full_data
Stea_data <- Stea_data %>% drop_na(Stea_eff_size)

Stea_data$power <- pwr.t2n.test(n1 = Stea_data$Stea_Int_size, n2 = Stea_data$Stea_Pla_size, d = Stea_data$Stea_eff_size)$power

write.table(Stea_data$power,file="Stea_data_power.csv",sep=",")

hist(Stea_data$power)

Stea_dens_power <- density(Stea_data$power)

pdf(file="Stea_kernel_power_v1.pdf")
plot(Stea_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)")
polygon(Stea_dens_power, col="red", border="blue")
dev.off()


## load packages for metan
library(dmetar)
library(meta)
library(metafor)
library(readxl)
max.print = 100000

## drop where <3 unique studies for any drug class
Stea_drugsclass_counts <- Stea_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
Stea_class_counts <- Stea_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

Stea_class_less3 = subset(Stea_class_counts, n <3)
str(Stea_class_less3)
Stea_class_less3$Drug_Class_new_1_all <- droplevels(Stea_class_less3$Drug_Class_new_1_all)
Stea_class_droplist <- Stea_class_less3$Drug_Class_new_1_all

Stea_data_min3class <- Stea_data %>% filter(!Drug_Class_new_1_all %in% Stea_class_droplist)


## run metan
Stea_metan_class_main <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Stea_metan_class <- update(Stea_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
Stea_metan_class_tab <- data.frame(Stea_metan_class[["TE.random.w"]])
Stea_metan_class_tab$drug <- Stea_metan_class[["bylevs"]]
Stea_metan_class_tab$SE <- Stea_metan_class[["seTE.random.w"]]
Stea_metan_class_tab$lower <- Stea_metan_class[["lower.random.w"]]
Stea_metan_class_tab$upper <- Stea_metan_class[["upper.random.w"]]
Stea_metan_class_tab$Pz <- Stea_metan_class[["pval.random.w"]]
Stea_metan_class_tab$weight <- Stea_metan_class[["w.random.w"]]
Stea_metan_class_tab$k <- Stea_metan_class[["k.w"]]
Stea_metan_class_tab$controls <- Stea_metan_class[["n.c.w"]]
Stea_metan_class_tab$experimental <- Stea_metan_class[["n.e.w"]]
Stea_metan_class_tab$Q <- Stea_metan_class[["Q.w"]]
Stea_metan_class_tab$Pq <- Stea_metan_class[["pval.Q.w"]]
Stea_metan_class_tab$tau <- Stea_metan_class[["tau.w"]]
Stea_metan_class_tab$I2 <- Stea_metan_class[["I2.w"]]
Stea_metan_class_tab <- Stea_metan_class_tab %>% rename(MD = Stea_metan_class...TE.random.w...)
Stea_metan_class_tab <- Stea_metan_class_tab[order(-Stea_metan_class_tab$MD),]
Stea_metan_class_tab$row_number <- 1:nrow(Stea_metan_class_tab) 
Stea_metan_class_tab$subgroup <- "Subgroup"
Stea_class_counts <- Stea_class_counts %>% rename(drug = Drug_Class_new_1_all)
Stea_metan_class_tab <- merge(Stea_class_counts, Stea_metan_class_tab, by="drug")

Stea_metan_class_tab_overall <- data.frame(Stea_metan_class[["TE.random"]])
Stea_metan_class_tab_overall$drug <- "Overall"
Stea_metan_class_tab_overall$SE <- Stea_metan_class[["seTE.random"]]
Stea_metan_class_tab_overall$lower <- Stea_metan_class[["lower.random"]]
Stea_metan_class_tab_overall$upper <- Stea_metan_class[["upper.random"]]
Stea_metan_class_tab_overall$Pz <- Stea_metan_class[["pval.random"]]
Stea_metan_class_tab_overall$weight <- (max(Stea_metan_class_tab$weight)*2)
Stea_metan_class_tab_overall$k <- Stea_metan_class[["k"]]
Stea_metan_class_tab_overall$controls <- sum(Stea_metan_class_tab$controls)
Stea_metan_class_tab_overall$experimental <- sum(Stea_metan_class_tab$experimental)
Stea_metan_class_tab_overall$Q <- Stea_metan_class[["Q"]]
Stea_metan_class_tab_overall$Pq <- Stea_metan_class[["pval.Q"]]
Stea_metan_class_tab_overall$tau <- Stea_metan_class[["tau"]]
Stea_metan_class_tab_overall$I2 <- Stea_metan_class[["I2"]]
Stea_metan_class_tab_overall <- Stea_metan_class_tab_overall %>% rename(MD = Stea_metan_class...TE.random...)
Stea_metan_class_tab_overall$row_number <- ((nrow(Stea_metan_class_tab))+1)
Stea_metan_class_tab_overall$subgroup <- "Overall"
Stea_metan_class_tab_overall$n <- sum(Stea_metan_class_tab$n)
Stea_metan_class_sumtab <- rbind(Stea_metan_class_tab, Stea_metan_class_tab_overall)
Stea_metan_class_sumtab$weight <- as.numeric(Stea_metan_class_sumtab$weight)
Stea_metan_class_sumtab$row_number <- as.numeric(Stea_metan_class_sumtab$row_number)
Stea_metan_class_sumtab$subgroup <- as.factor(Stea_metan_class_sumtab$subgroup)
Stea_metan_class_sumtab$total = Stea_metan_class_sumtab$controls + Stea_metan_class_sumtab$experimental

Stea_metan_class_sumtab$text <- paste(format(round(Stea_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Stea_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Stea_metan_class_sumtab$text <- paste(Stea_metan_class_sumtab$text, format(round(Stea_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Stea_metan_class_sumtab$text <- paste(Stea_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

Stea_metan_class_sumtab$SE_1dig <- paste(format(round(Stea_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Stea_metan_class_sumtab$Pz_1dig <- paste((signif(Stea_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Stea_metan_class_sumtab$tI2_2dig <- paste(format(round(Stea_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Stea_metan_class_sumtab$tau_1dig <- paste(format(round(Stea_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Stea_metan_class_sumtab$Pq_1dig <- paste((signif(Stea_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Stea_metan_class_sumtab,file="Stea_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(Stea_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Stea_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Stea_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = Stea_metan_class_tab_overall$lower
overall_max = Stea_metan_class_tab_overall$upper

Stea_metan_class_ybreaks <- nrow(Stea_metan_class_sumtab)
Stea_metan_class_sumtab <- Stea_metan_class_sumtab[order(Stea_metan_class_sumtab$row_number),]

Stea_metan_class_forest <- ggplot(data= Stea_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Stea_metan_class_ybreaks, labels = Stea_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in steatosis grade") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.75, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-3.7, 3.5), breaks=seq(-3, 1, 0.5), expand=c(0,0)) + geom_text(data=Stea_metan_class_sumtab, aes(x=.8, label=text), size = 3.5, hjust=0) + geom_text(data=Stea_metan_class_sumtab, aes(x=-3.6, label=k), size = 3.5, hjust=0) + geom_text(data=Stea_metan_class_sumtab, aes(x=-3.25, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-4, 2))


pdf(file="Stea_metan_class_forest.pdf",width=9,height=6)
Stea_metan_class_forest
dev.off()


#####################

#######

## bias analysis

Stea_class_eggers <- eggers.test(x = Stea_metan_class_main)
Stea_class_eggers
sink("Stea_class_eggers.txt")
print(Stea_class_eggers)
sink()

Stea_class_trimfill <- trimfill(Stea_metan_class_main)
Stea_class_trimfill
sink("Stea_class_trimfill.txt")
print(Stea_class_trimfill)
sink()

pdf(file="Stea_class_funnel.pdf")
funnel(Stea_class_trimfill, xlab="Mean difference in hepatic Stea (%)", xlim=c(-4,4), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-3.5, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue"))
dev.off()

## use Baujat plot to look for outliers

pdf(file="Stea_class_baujat.pdf")
Stea_class_baujat <- baujat(Stea_metan_class_main)
Stea_class_baujat
dev.off()

## look for outliers based on SD

Stea_commSD_mean <- mean(Stea_data$Stea_comm_SD, na.rm=TRUE)
Stea_commSD_SD <- sd(Stea_data$Stea_comm_SD, na.rm=TRUE)

Stea_commSD_norm <- dnorm(Stea_data$Stea_comm_SD, mean = Stea_commSD_mean, sd = Stea_commSD_SD, log = FALSE)
Stea_commSD_norm <- as.data.frame(Stea_commSD_norm)
Stea_commSD_norm$Stea_comm_SD <- Stea_data$Stea_comm_SD
Stea_commSD_norm$Paper <- Stea_data$Paper

pdf(file = "Stea_commSD_norm.pdf")
plot(Stea_commSD_norm$Stea_comm_SD, Stea_commSD_norm$Stea_commSD_norm)
dev.off()

## exclude studies with Stea_comm_SD >1.5 or high contribution to heterogeneity on baujat plot

Stea_NoOutlier_data = subset(Stea_data, Stea_comm_SD <1.5)
Stea_NoOutlier_data <- Stea_NoOutlier_data %>% filter(Paper != "Afrin 2017" & Paper != "Kim 2012b" & Paper != "Goto 2018_4" & Paper != "Goto 2018_3" & Paper != "Miranda−Henrique 2014" & Paper != "Valdecantos 2017_2")


#######


## re-rerun after outliers excluded


## drop where <3 unique studies for any drug class
Stea_NoOutlier_drugsclass_counts <- Stea_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
Stea_NoOutlier_class_counts <- Stea_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

Stea_NoOutlier_class_less3 = subset(Stea_NoOutlier_class_counts, n <3)
str(Stea_NoOutlier_class_less3)
Stea_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(Stea_NoOutlier_class_less3$Drug_Class_new_1_all)
Stea_NoOutlier_class_droplist <- Stea_NoOutlier_class_less3$Drug_Class_new_1_all

Stea_NoOutlier_data_min3class <- Stea_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% Stea_NoOutlier_class_droplist)


## run metan
Stea_NoOutlier_metan_class_main <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Stea_NoOutlier_metan_class <- update(Stea_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
Stea_NoOutlier_metan_class_tab <- data.frame(Stea_NoOutlier_metan_class[["TE.random.w"]])
Stea_NoOutlier_metan_class_tab$drug <- Stea_NoOutlier_metan_class[["bylevs"]]
Stea_NoOutlier_metan_class_tab$SE <- Stea_NoOutlier_metan_class[["seTE.random.w"]]
Stea_NoOutlier_metan_class_tab$lower <- Stea_NoOutlier_metan_class[["lower.random.w"]]
Stea_NoOutlier_metan_class_tab$upper <- Stea_NoOutlier_metan_class[["upper.random.w"]]
Stea_NoOutlier_metan_class_tab$Pz <- Stea_NoOutlier_metan_class[["pval.random.w"]]
Stea_NoOutlier_metan_class_tab$weight <- Stea_NoOutlier_metan_class[["w.random.w"]]
Stea_NoOutlier_metan_class_tab$k <- Stea_NoOutlier_metan_class[["k.w"]]
Stea_NoOutlier_metan_class_tab$controls <- Stea_NoOutlier_metan_class[["n.c.w"]]
Stea_NoOutlier_metan_class_tab$experimental <- Stea_NoOutlier_metan_class[["n.e.w"]]
Stea_NoOutlier_metan_class_tab$Q <- Stea_NoOutlier_metan_class[["Q.w"]]
Stea_NoOutlier_metan_class_tab$Pq <- Stea_NoOutlier_metan_class[["pval.Q.w"]]
Stea_NoOutlier_metan_class_tab$tau <- Stea_NoOutlier_metan_class[["tau.w"]]
Stea_NoOutlier_metan_class_tab$I2 <- Stea_NoOutlier_metan_class[["I2.w"]]
Stea_NoOutlier_metan_class_tab <- Stea_NoOutlier_metan_class_tab %>% rename(MD = Stea_NoOutlier_metan_class...TE.random.w...)
Stea_NoOutlier_metan_class_tab <- Stea_NoOutlier_metan_class_tab[order(-Stea_NoOutlier_metan_class_tab$MD),]
Stea_NoOutlier_metan_class_tab <- Stea_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n())
Stea_NoOutlier_metan_class_tab$subgroup <- "Subgroup"
Stea_NoOutlier_class_counts <- Stea_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all)
Stea_NoOutlier_metan_class_tab <- merge(Stea_NoOutlier_class_counts, Stea_NoOutlier_metan_class_tab, by="drug")

Stea_NoOutlier_metan_class_tab_overall <- data.frame(Stea_NoOutlier_metan_class[["TE.random"]])
Stea_NoOutlier_metan_class_tab_overall$drug <- "Overall"
Stea_NoOutlier_metan_class_tab_overall$SE <- Stea_NoOutlier_metan_class[["seTE.random"]]
Stea_NoOutlier_metan_class_tab_overall$lower <- Stea_NoOutlier_metan_class[["lower.random"]]
Stea_NoOutlier_metan_class_tab_overall$upper <- Stea_NoOutlier_metan_class[["upper.random"]]
Stea_NoOutlier_metan_class_tab_overall$Pz <- Stea_NoOutlier_metan_class[["pval.random"]]
Stea_NoOutlier_metan_class_tab_overall$weight <- (max(Stea_NoOutlier_metan_class_tab$weight)*2)
Stea_NoOutlier_metan_class_tab_overall$k <- Stea_NoOutlier_metan_class[["k"]]
Stea_NoOutlier_metan_class_tab_overall$controls <- sum(Stea_NoOutlier_metan_class_tab$controls)
Stea_NoOutlier_metan_class_tab_overall$experimental <- sum(Stea_NoOutlier_metan_class_tab$experimental)
Stea_NoOutlier_metan_class_tab_overall$Q <- Stea_NoOutlier_metan_class[["Q"]]
Stea_NoOutlier_metan_class_tab_overall$Pq <- Stea_NoOutlier_metan_class[["pval.Q"]]
Stea_NoOutlier_metan_class_tab_overall$tau <- Stea_NoOutlier_metan_class[["tau"]]
Stea_NoOutlier_metan_class_tab_overall$I2 <- Stea_NoOutlier_metan_class[["I2"]]
Stea_NoOutlier_metan_class_tab_overall <- Stea_NoOutlier_metan_class_tab_overall %>% rename(MD = Stea_NoOutlier_metan_class...TE.random...)
Stea_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(Stea_NoOutlier_metan_class_tab))+1)
Stea_NoOutlier_metan_class_tab_overall$subgroup <- "Overall"
Stea_NoOutlier_metan_class_tab_overall$n <- sum(Stea_NoOutlier_metan_class_tab$n)
Stea_NoOutlier_metan_class_sumtab <- rbind(Stea_NoOutlier_metan_class_tab, Stea_NoOutlier_metan_class_tab_overall)
Stea_NoOutlier_metan_class_sumtab$weight <- as.numeric(Stea_NoOutlier_metan_class_sumtab$weight)
Stea_NoOutlier_metan_class_sumtab$row_number <- as.numeric(Stea_NoOutlier_metan_class_sumtab$row_number)
Stea_NoOutlier_metan_class_sumtab$subgroup <- as.factor(Stea_NoOutlier_metan_class_sumtab$subgroup)
Stea_NoOutlier_metan_class_sumtab$total = Stea_NoOutlier_metan_class_sumtab$controls + Stea_NoOutlier_metan_class_sumtab$experimental

Stea_NoOutlier_metan_class_sumtab$text <- paste(format(round(Stea_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Stea_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Stea_NoOutlier_metan_class_sumtab$text <- paste(Stea_NoOutlier_metan_class_sumtab$text, format(round(Stea_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Stea_NoOutlier_metan_class_sumtab$text <- paste(Stea_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

Stea_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(Stea_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Stea_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(Stea_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Stea_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(Stea_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Stea_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(Stea_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Stea_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(Stea_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Stea_NoOutlier_metan_class_sumtab,file="Stea_NoOutlier_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(Stea_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Stea_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Stea_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = Stea_NoOutlier_metan_class_tab_overall$lower
overall_max = Stea_NoOutlier_metan_class_tab_overall$upper

Stea_NoOutlier_metan_class_ybreaks <- nrow(Stea_NoOutlier_metan_class_sumtab)
Stea_NoOutlier_metan_class_sumtab <- Stea_NoOutlier_metan_class_sumtab[order(Stea_NoOutlier_metan_class_sumtab$row_number),]

Stea_NoOutlier_metan_class_forest <- ggplot(data= Stea_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Stea_NoOutlier_metan_class_ybreaks, labels = Stea_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in steatosis grade") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.75, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-3.7, 3.5), breaks=seq(-3, 1, 0.5), expand=c(0,0)) + geom_text(data=Stea_NoOutlier_metan_class_sumtab, aes(x=.8, label=text), size = 3.5, hjust=0) + geom_text(data=Stea_NoOutlier_metan_class_sumtab, aes(x=-3.6, label=k), size = 3.5, hjust=0) + geom_text(data=Stea_NoOutlier_metan_class_sumtab, aes(x=-3.25, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-4, 2))


pdf(file="Stea_NoOutlier_metan_class_forest.pdf",width=9,height=6)
Stea_NoOutlier_metan_class_forest
dev.off()


#######

## re-run using sub-grouping by individual drugs



## drop where <3 unique studies for any drug class
Stea_drugIndiv_counts <- Stea_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n())
Stea_drugIndiv_sum_counts <- Stea_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n())

Stea_drugIndiv_less3 = subset(Stea_drugIndiv_sum_counts, n <3)
str(Stea_drugIndiv_less3)
Stea_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(Stea_drugIndiv_less3$Indiv_drug_class_3)
Stea_drugIndiv_droplist <- Stea_drugIndiv_less3$Indiv_drug_class_3

Stea_data_min3drug <- Stea_data %>% filter(!Indiv_drug_class_3 %in% Stea_drugIndiv_droplist)


## run metan
Stea_metan_drugIndiv <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Stea_metan_drugIndiv <- update(Stea_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug")

## make summary table of results
Stea_metan_drugIndiv_tab <- data.frame(Stea_metan_drugIndiv[["TE.random.w"]])
Stea_metan_drugIndiv_tab$drug <- Stea_metan_drugIndiv[["bylevs"]]
Stea_metan_drugIndiv_tab$SE <- Stea_metan_drugIndiv[["seTE.random.w"]]
Stea_metan_drugIndiv_tab$lower <- Stea_metan_drugIndiv[["lower.random.w"]]
Stea_metan_drugIndiv_tab$upper <- Stea_metan_drugIndiv[["upper.random.w"]]
Stea_metan_drugIndiv_tab$Pz <- Stea_metan_drugIndiv[["pval.random.w"]]
Stea_metan_drugIndiv_tab$weight <- Stea_metan_drugIndiv[["w.random.w"]]
Stea_metan_drugIndiv_tab$k <- Stea_metan_drugIndiv[["k.w"]]
Stea_metan_drugIndiv_tab$controls <- Stea_metan_drugIndiv[["n.c.w"]]
Stea_metan_drugIndiv_tab$experimental <- Stea_metan_drugIndiv[["n.e.w"]]
Stea_metan_drugIndiv_tab$Q <- Stea_metan_drugIndiv[["Q.w"]]
Stea_metan_drugIndiv_tab$Pq <- Stea_metan_drugIndiv[["pval.Q.w"]]
Stea_metan_drugIndiv_tab$tau <- Stea_metan_drugIndiv[["tau.w"]]
Stea_metan_drugIndiv_tab$I2 <- Stea_metan_drugIndiv[["I2.w"]]
Stea_metan_drugIndiv_tab <- Stea_metan_drugIndiv_tab %>% rename(MD = Stea_metan_drugIndiv...TE.random.w...)
Stea_metan_drugIndiv_tab <- Stea_metan_drugIndiv_tab[order(-Stea_metan_drugIndiv_tab$MD),]
Stea_metan_drugIndiv_tab <- Stea_metan_drugIndiv_tab %>% mutate(row_number= 1:n())
Stea_metan_drugIndiv_tab$subgroup <- "Subgroup"
Stea_drugIndiv_sum_counts <- Stea_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3)
Stea_metan_drugIndiv_tab <- merge(Stea_drugIndiv_sum_counts, Stea_metan_drugIndiv_tab, by="drug")

Stea_metan_drugIndiv_tab_overall <- data.frame(Stea_metan_drugIndiv[["TE.random"]])
Stea_metan_drugIndiv_tab_overall$drug <- "Overall"
Stea_metan_drugIndiv_tab_overall$SE <- Stea_metan_drugIndiv[["seTE.random"]]
Stea_metan_drugIndiv_tab_overall$lower <- Stea_metan_drugIndiv[["lower.random"]]
Stea_metan_drugIndiv_tab_overall$upper <- Stea_metan_drugIndiv[["upper.random"]]
Stea_metan_drugIndiv_tab_overall$Pz <- Stea_metan_drugIndiv[["pval.random"]]
Stea_metan_drugIndiv_tab_overall$weight <- (max(Stea_metan_drugIndiv_tab$weight)*2)
Stea_metan_drugIndiv_tab_overall$k <- Stea_metan_drugIndiv[["k"]]
Stea_metan_drugIndiv_tab_overall$controls <- sum(Stea_metan_drugIndiv_tab$controls)
Stea_metan_drugIndiv_tab_overall$experimental <- sum(Stea_metan_drugIndiv_tab$experimental)
Stea_metan_drugIndiv_tab_overall$Q <- Stea_metan_drugIndiv[["Q"]]
Stea_metan_drugIndiv_tab_overall$Pq <- Stea_metan_drugIndiv[["pval.Q"]]
Stea_metan_drugIndiv_tab_overall$tau <- Stea_metan_drugIndiv[["tau"]]
Stea_metan_drugIndiv_tab_overall$I2 <- Stea_metan_drugIndiv[["I2"]]
Stea_metan_drugIndiv_tab_overall <- Stea_metan_drugIndiv_tab_overall %>% rename(MD = Stea_metan_drugIndiv...TE.random...)
Stea_metan_drugIndiv_tab_overall$row_number <- ((nrow(Stea_metan_drugIndiv_tab))+1)
Stea_metan_drugIndiv_tab_overall$subgroup <- "Overall"
Stea_metan_drugIndiv_tab_overall$n <- sum(Stea_metan_drugIndiv_tab$n)
Stea_metan_drugIndiv_sumtab <- rbind(Stea_metan_drugIndiv_tab, Stea_metan_drugIndiv_tab_overall)
Stea_metan_drugIndiv_sumtab$weight <- as.numeric(Stea_metan_drugIndiv_sumtab$weight)
Stea_metan_drugIndiv_sumtab$row_number <- as.numeric(Stea_metan_drugIndiv_sumtab$row_number)
Stea_metan_drugIndiv_sumtab$subgroup <- as.factor(Stea_metan_drugIndiv_sumtab$subgroup)
Stea_metan_drugIndiv_sumtab$total = Stea_metan_drugIndiv_sumtab$controls + Stea_metan_drugIndiv_sumtab$experimental

Stea_metan_drugIndiv_sumtab$text <- paste(format(round(Stea_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(Stea_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Stea_metan_drugIndiv_sumtab$text <- paste(Stea_metan_drugIndiv_sumtab$text, format(round(Stea_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Stea_metan_drugIndiv_sumtab$text <- paste(Stea_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL)

Stea_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(Stea_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Stea_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(Stea_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Stea_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(Stea_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Stea_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(Stea_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Stea_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(Stea_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Stea_metan_drugIndiv_sumtab,file="Stea_metan_drugIndiv_sumtab.csv",sep=",")

## make forest plot

label_bold <- ifelse(Stea_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Stea_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Stea_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10")

overall_min = Stea_metan_drugIndiv_tab_overall$lower
overall_max = Stea_metan_drugIndiv_tab_overall$upper

Stea_metan_drugIndiv_ybreaks <- nrow(Stea_metan_drugIndiv_sumtab)
Stea_metan_drugIndiv_sumtab <- Stea_metan_drugIndiv_sumtab[order(Stea_metan_drugIndiv_sumtab$row_number),]

Stea_metan_drugIndiv_forest <- ggplot(data= Stea_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Stea_metan_drugIndiv_ybreaks, labels = Stea_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in steatosis grade") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.75, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-3.7, 3.5), breaks=seq(-3, 1, 0.5), expand=c(0,0)) + geom_text(data=Stea_metan_drugIndiv_sumtab, aes(x=.8, label=text), size = 3.5, hjust=0) + geom_text(data=Stea_metan_drugIndiv_sumtab, aes(x=-3.6, label=k), size = 3.5, hjust=0) + geom_text(data=Stea_metan_drugIndiv_sumtab, aes(x=-3.25, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-4, 2))

pdf(file="Stea_metan_drugIndiv_forest.pdf",width=9,height=6)
Stea_metan_drugIndiv_forest
dev.off()



########

## calculate sample size needed for average results
## mean comm_SD = Stea_commSD_mean
## meta-analysis mean difference = Stea_metan_class_main[["TE.random"]]
## calculate Cohen's d
Stea_cohen_d = Stea_metan_class_main[["TE.random"]] / Stea_commSD_mean

Stea_samplesize_av <- pwr.t.test(d = Stea_cohen_d, power = 0.80, sig.level = 0.05)
## n = 16 - number in **each** group

## find number of studies with n > Stea_samplesize_av

Stea_data$total = Stea_data$Stea_Int_size + Stea_data$Stea_Pla_size

Stea_pwrcount <- Stea_data %>% group_by(total, Paper) %>% summarise(n = n())

Stea_pwrcount_adequate = subset(Stea_pwrcount, total >= 2*(Stea_samplesize_av[["n"]]))
write.table(Stea_pwrcount_adequate,file="Stea_pwrcount_adequate.csv",sep=",")

########

## run meta-regressions on full Stea dataset for continuous traits

Stea_metan_full <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## create metan with >3 for each level of categorical variables

## Background

Stea_bg_counts <- Stea_data %>% group_by(Background_simple, Study) %>% summarise(n = n())
Stea_bg_counts_sum <- Stea_bg_counts %>% group_by(Background_simple) %>% summarise(n = n())

Stea_bg_less3 = subset(Stea_bg_counts_sum, n <3)
Stea_bg_less3$Background_simple <- droplevels(Stea_bg_less3$Background_simple)
Stea_bg_droplist <- Stea_bg_less3$Background_simple

Stea_data_min3bg <- Stea_data %>% filter(!Background_simple %in% Stea_bg_droplist)

Stea_metan_bg <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## Model 

Stea_model_counts <- Stea_data %>% group_by(Model_simple, Study) %>% summarise(n = n())
Stea_model_counts_sum <- Stea_model_counts %>% group_by(Model_simple) %>% summarise(n = n())

Stea_model_less3 = subset(Stea_model_counts_sum, n <3)
Stea_model_less3$Model_simple <- droplevels(Stea_model_less3$Model_simple)
Stea_model_droplist <- Stea_model_less3$Model_simple

Stea_data_min3model <- Stea_data %>% filter(!Model_simple %in% Stea_model_droplist)

Stea_metan_model <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## run metaregs

Stea_reg_Qual_score <- metareg(Stea_metan_full, Qual_score)
Stea_reg_Qual_score_tab <- data.frame(Stea_reg_Qual_score[["beta"]])
Stea_reg_Qual_score_tab$se <- Stea_reg_Qual_score[["se"]]
Stea_reg_Qual_score_tab$pval <- Stea_reg_Qual_score[["pval"]]
Stea_reg_Qual_score_tab$beta <- Stea_reg_Qual_score[["beta"]]
Stea_reg_Qual_score_tab <- Stea_reg_Qual_score_tab[-c(1),]
Stea_reg_Qual_score_tab <- Stea_reg_Qual_score_tab[-c(1)]
Stea_reg_Qual_score_tab$k <- Stea_reg_Qual_score[["k"]]
Stea_reg_Qual_score_tab$r2 <- Stea_reg_Qual_score[["R2"]]
Stea_reg_Qual_score_tab$var <- "Qual_score"

Stea_reg_Protocol <- metareg(Stea_metan_full, Protocol)
Stea_reg_Protocol_tab <- data.frame(Stea_reg_Protocol[["beta"]])
Stea_reg_Protocol_tab$se <- Stea_reg_Protocol[["se"]]
Stea_reg_Protocol_tab$pval <- Stea_reg_Protocol[["pval"]]
Stea_reg_Protocol_tab$beta <- Stea_reg_Protocol[["beta"]]
Stea_reg_Protocol_tab <- Stea_reg_Protocol_tab[-c(1),]
Stea_reg_Protocol_tab <- Stea_reg_Protocol_tab[-c(1)]
Stea_reg_Protocol_tab$k <- Stea_reg_Protocol[["k"]]
Stea_reg_Protocol_tab$r2 <- Stea_reg_Protocol[["R2"]]
Stea_reg_Protocol_tab$var <- "Protocol"

Stea_reg_Randomisation <- metareg(Stea_metan_full, Randomisation)
Stea_reg_Randomisation_tab <- data.frame(Stea_reg_Randomisation[["beta"]])
Stea_reg_Randomisation_tab$se <- Stea_reg_Randomisation[["se"]]
Stea_reg_Randomisation_tab$pval <- Stea_reg_Randomisation[["pval"]]
Stea_reg_Randomisation_tab$beta <- Stea_reg_Randomisation[["beta"]]
Stea_reg_Randomisation_tab <- Stea_reg_Randomisation_tab[-c(1),]
Stea_reg_Randomisation_tab <- Stea_reg_Randomisation_tab[-c(1)]
Stea_reg_Randomisation_tab$k <- Stea_reg_Randomisation[["k"]]
Stea_reg_Randomisation_tab$r2 <- Stea_reg_Randomisation[["R2"]]
Stea_reg_Randomisation_tab$var <- "Randomisation"

Stea_reg_Blinding <- metareg(Stea_metan_full, Blinding)
Stea_reg_Blinding_tab <- data.frame(Stea_reg_Blinding[["beta"]])
Stea_reg_Blinding_tab$se <- Stea_reg_Blinding[["se"]]
Stea_reg_Blinding_tab$pval <- Stea_reg_Blinding[["pval"]]
Stea_reg_Blinding_tab$beta <- Stea_reg_Blinding[["beta"]]
Stea_reg_Blinding_tab <- Stea_reg_Blinding_tab[-c(1),]
Stea_reg_Blinding_tab <- Stea_reg_Blinding_tab[-c(1)]
Stea_reg_Blinding_tab$k <- Stea_reg_Blinding[["k"]]
Stea_reg_Blinding_tab$r2 <- Stea_reg_Blinding[["R2"]]
Stea_reg_Blinding_tab$var <- "Blinding"

Stea_reg_Power_calculation <- metareg(Stea_metan_full, Power_calculation)
Stea_reg_Power_calculation_tab <- data.frame(Stea_reg_Power_calculation[["beta"]])
Stea_reg_Power_calculation_tab$se <- Stea_reg_Power_calculation[["se"]]
Stea_reg_Power_calculation_tab$pval <- Stea_reg_Power_calculation[["pval"]]
Stea_reg_Power_calculation_tab$beta <- Stea_reg_Power_calculation[["beta"]]
Stea_reg_Power_calculation_tab <- Stea_reg_Power_calculation_tab[-c(1),]
Stea_reg_Power_calculation_tab <- Stea_reg_Power_calculation_tab[-c(1)]
Stea_reg_Power_calculation_tab$k <- Stea_reg_Power_calculation[["k"]]
Stea_reg_Power_calculation_tab$r2 <- Stea_reg_Power_calculation[["R2"]]
Stea_reg_Power_calculation_tab$var <- "Power_calculation"

Stea_reg_Chol_per <- metareg(Stea_metan_full, Chol_per)
Stea_reg_Chol_per_tab <- data.frame(Stea_reg_Chol_per[["beta"]])
Stea_reg_Chol_per_tab$se <- Stea_reg_Chol_per[["se"]]
Stea_reg_Chol_per_tab$pval <- Stea_reg_Chol_per[["pval"]]
Stea_reg_Chol_per_tab$beta <- Stea_reg_Chol_per[["beta"]]
Stea_reg_Chol_per_tab <- Stea_reg_Chol_per_tab[-c(1),]
Stea_reg_Chol_per_tab <- Stea_reg_Chol_per_tab[-c(1)]
Stea_reg_Chol_per_tab$k <- Stea_reg_Chol_per[["k"]]
Stea_reg_Chol_per_tab$r2 <- Stea_reg_Chol_per[["R2"]]
Stea_reg_Chol_per_tab$var <- "Chol_per"

Stea_reg_log_FructGluc_per <- metareg(Stea_metan_full, log_FructGluc_per)
Stea_reg_log_FructGluc_per_tab <- data.frame(Stea_reg_log_FructGluc_per[["beta"]])
Stea_reg_log_FructGluc_per_tab$se <- Stea_reg_log_FructGluc_per[["se"]]
Stea_reg_log_FructGluc_per_tab$pval <- Stea_reg_log_FructGluc_per[["pval"]]
Stea_reg_log_FructGluc_per_tab$beta <- Stea_reg_log_FructGluc_per[["beta"]]
Stea_reg_log_FructGluc_per_tab <- Stea_reg_log_FructGluc_per_tab[-c(1),]
Stea_reg_log_FructGluc_per_tab <- Stea_reg_log_FructGluc_per_tab[-c(1)]
Stea_reg_log_FructGluc_per_tab$k <- Stea_reg_log_FructGluc_per[["k"]]
Stea_reg_log_FructGluc_per_tab$r2 <- Stea_reg_log_FructGluc_per[["R2"]]
Stea_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per"

Stea_reg_log_Sucr_kcal <- metareg(Stea_metan_full, log_Sucr_kcal)
Stea_reg_log_Sucr_kcal_tab <- data.frame(Stea_reg_log_Sucr_kcal[["beta"]])
Stea_reg_log_Sucr_kcal_tab$se <- Stea_reg_log_Sucr_kcal[["se"]]
Stea_reg_log_Sucr_kcal_tab$pval <- Stea_reg_log_Sucr_kcal[["pval"]]
Stea_reg_log_Sucr_kcal_tab$beta <- Stea_reg_log_Sucr_kcal[["beta"]]
Stea_reg_log_Sucr_kcal_tab <- Stea_reg_log_Sucr_kcal_tab[-c(1),]
Stea_reg_log_Sucr_kcal_tab <- Stea_reg_log_Sucr_kcal_tab[-c(1)]
Stea_reg_log_Sucr_kcal_tab$k <- Stea_reg_log_Sucr_kcal[["k"]]
Stea_reg_log_Sucr_kcal_tab$r2 <- Stea_reg_log_Sucr_kcal[["R2"]]
Stea_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal"

Stea_reg_log_Fat_kcal <- metareg(Stea_metan_full, log_Fat_kcal)
Stea_reg_log_Fat_kcal_tab <- data.frame(Stea_reg_log_Fat_kcal[["beta"]])
Stea_reg_log_Fat_kcal_tab$se <- Stea_reg_log_Fat_kcal[["se"]]
Stea_reg_log_Fat_kcal_tab$pval <- Stea_reg_log_Fat_kcal[["pval"]]
Stea_reg_log_Fat_kcal_tab$beta <- Stea_reg_log_Fat_kcal[["beta"]]
Stea_reg_log_Fat_kcal_tab <- Stea_reg_log_Fat_kcal_tab[-c(1),]
Stea_reg_log_Fat_kcal_tab <- Stea_reg_log_Fat_kcal_tab[-c(1)]
Stea_reg_log_Fat_kcal_tab$k <- Stea_reg_log_Fat_kcal[["k"]]
Stea_reg_log_Fat_kcal_tab$r2 <- Stea_reg_log_Fat_kcal[["R2"]]
Stea_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal"

Stea_reg_log_Age_start <- metareg(Stea_metan_full, log_Age_start)
Stea_reg_log_Age_start_tab <- data.frame(Stea_reg_log_Age_start[["beta"]])
Stea_reg_log_Age_start_tab$se <- Stea_reg_log_Age_start[["se"]]
Stea_reg_log_Age_start_tab$pval <- Stea_reg_log_Age_start[["pval"]]
Stea_reg_log_Age_start_tab$beta <- Stea_reg_log_Age_start[["beta"]]
Stea_reg_log_Age_start_tab <- Stea_reg_log_Age_start_tab[-c(1),]
Stea_reg_log_Age_start_tab <- Stea_reg_log_Age_start_tab[-c(1)]
Stea_reg_log_Age_start_tab$k <- Stea_reg_log_Age_start[["k"]]
Stea_reg_log_Age_start_tab$r2 <- Stea_reg_log_Age_start[["R2"]]
Stea_reg_log_Age_start_tab$var <- "log_Age_start"

Stea_reg_log_Duration <- metareg(Stea_metan_full, log_Duration)
Stea_reg_log_Duration_tab <- data.frame(Stea_reg_log_Duration[["beta"]])
Stea_reg_log_Duration_tab$se <- Stea_reg_log_Duration[["se"]]
Stea_reg_log_Duration_tab$pval <- Stea_reg_log_Duration[["pval"]]
Stea_reg_log_Duration_tab$beta <- Stea_reg_log_Duration[["beta"]]
Stea_reg_log_Duration_tab <- Stea_reg_log_Duration_tab[-c(1),]
Stea_reg_log_Duration_tab <- Stea_reg_log_Duration_tab[-c(1)]
Stea_reg_log_Duration_tab$k <- Stea_reg_log_Duration[["k"]]
Stea_reg_log_Duration_tab$r2 <- Stea_reg_log_Duration[["R2"]]
Stea_reg_log_Duration_tab$var <- "log_Duration"

Stea_reg_log_Age_end <- metareg(Stea_metan_full, log_Age_end)
Stea_reg_log_Age_end_tab <- data.frame(Stea_reg_log_Age_end[["beta"]])
Stea_reg_log_Age_end_tab$se <- Stea_reg_log_Age_end[["se"]]
Stea_reg_log_Age_end_tab$pval <- Stea_reg_log_Age_end[["pval"]]
Stea_reg_log_Age_end_tab$beta <- Stea_reg_log_Age_end[["beta"]]
Stea_reg_log_Age_end_tab <- Stea_reg_log_Age_end_tab[-c(1),]
Stea_reg_log_Age_end_tab <- Stea_reg_log_Age_end_tab[-c(1)]
Stea_reg_log_Age_end_tab$k <- Stea_reg_log_Age_end[["k"]]
Stea_reg_log_Age_end_tab$r2 <- Stea_reg_log_Age_end[["R2"]]
Stea_reg_log_Age_end_tab$var <- "log_Age_end"

Stea_reg_log_Wt_change <- metareg(Stea_metan_full, log_Wt_change)
Stea_reg_log_Wt_change_tab <- data.frame(Stea_reg_log_Wt_change[["beta"]])
Stea_reg_log_Wt_change_tab$se <- Stea_reg_log_Wt_change[["se"]]
Stea_reg_log_Wt_change_tab$pval <- Stea_reg_log_Wt_change[["pval"]]
Stea_reg_log_Wt_change_tab$beta <- Stea_reg_log_Wt_change[["beta"]]
Stea_reg_log_Wt_change_tab <- Stea_reg_log_Wt_change_tab[-c(1),]
Stea_reg_log_Wt_change_tab <- Stea_reg_log_Wt_change_tab[-c(1)]
Stea_reg_log_Wt_change_tab$k <- Stea_reg_log_Wt_change[["k"]]
Stea_reg_log_Wt_change_tab$r2 <- Stea_reg_log_Wt_change[["R2"]]
Stea_reg_log_Wt_change_tab$var <- "log_Wt_change"

Stea_reg_log_Gluc_change <- metareg(Stea_metan_full, log_Gluc_change)
Stea_reg_log_Gluc_change_tab <- data.frame(Stea_reg_log_Gluc_change[["beta"]])
Stea_reg_log_Gluc_change_tab$se <- Stea_reg_log_Gluc_change[["se"]]
Stea_reg_log_Gluc_change_tab$pval <- Stea_reg_log_Gluc_change[["pval"]]
Stea_reg_log_Gluc_change_tab$beta <- Stea_reg_log_Gluc_change[["beta"]]
Stea_reg_log_Gluc_change_tab <- Stea_reg_log_Gluc_change_tab[-c(1),]
Stea_reg_log_Gluc_change_tab <- Stea_reg_log_Gluc_change_tab[-c(1)]
Stea_reg_log_Gluc_change_tab$k <- Stea_reg_log_Gluc_change[["k"]]
Stea_reg_log_Gluc_change_tab$r2 <- Stea_reg_log_Gluc_change[["R2"]]
Stea_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

Stea_reg_log_Insul_change <- metareg(Stea_metan_full, log_Insul_change)
Stea_reg_log_Insul_change_tab <- data.frame(Stea_reg_log_Insul_change[["beta"]])
Stea_reg_log_Insul_change_tab$se <- Stea_reg_log_Insul_change[["se"]]
Stea_reg_log_Insul_change_tab$pval <- Stea_reg_log_Insul_change[["pval"]]
Stea_reg_log_Insul_change_tab$beta <- Stea_reg_log_Insul_change[["beta"]]
Stea_reg_log_Insul_change_tab <- Stea_reg_log_Insul_change_tab[-c(1),]
Stea_reg_log_Insul_change_tab <- Stea_reg_log_Insul_change_tab[-c(1)]
Stea_reg_log_Insul_change_tab$k <- Stea_reg_log_Insul_change[["k"]]
Stea_reg_log_Insul_change_tab$r2 <- Stea_reg_log_Insul_change[["R2"]]
Stea_reg_log_Insul_change_tab$var <- "log_Insul_change"

Stea_reg_Sex <- metareg(Stea_metan_full, Sex)
Stea_reg_Sex_tab <- data.frame(Stea_reg_Sex[["beta"]])
Stea_reg_Sex_tab$se <- Stea_reg_Sex[["se"]]
Stea_reg_Sex_tab$pval <- Stea_reg_Sex[["pval"]]
Stea_reg_Sex_tab$beta <- Stea_reg_Sex[["beta"]]
Stea_reg_Sex_tab <- Stea_reg_Sex_tab[-c(1),]
Stea_reg_Sex_tab <- Stea_reg_Sex_tab[-c(1)]
Stea_reg_Sex_tab$k <- Stea_reg_Sex[["k"]]
Stea_reg_Sex_tab$r2 <- NA
Stea_reg_Sex_tab$var <- rownames(Stea_reg_Sex_tab)
Stea_reg_Sex_overall_tab <- data.frame(Stea_reg_Sex[["QMp"]])
Stea_reg_Sex_overall_tab$se <- NA
Stea_reg_Sex_overall_tab$pval <- Stea_reg_Sex[["QMp"]]
Stea_reg_Sex_overall_tab$beta <- NA
Stea_reg_Sex_overall_tab <- Stea_reg_Sex_overall_tab[-c(1)]
Stea_reg_Sex_overall_tab$k <- Stea_reg_Sex[["k"]]
Stea_reg_Sex_overall_tab$r2 <- Stea_reg_Sex[["R2"]]
Stea_reg_Sex_overall_tab$var <- "Sex_overall"
Stea_reg_Sex_tab <- rbind(Stea_reg_Sex_tab, Stea_reg_Sex_overall_tab)

Stea_reg_Drug_dose <- metareg(Stea_metan_drugIndiv, Drug_dose)
Stea_reg_Drug_dose_tab <- data.frame(Stea_reg_Drug_dose[["beta"]])
Stea_reg_Drug_dose_tab$se <- Stea_reg_Drug_dose[["se"]]
Stea_reg_Drug_dose_tab$pval <- Stea_reg_Drug_dose[["pval"]]
Stea_reg_Drug_dose_tab$beta <- Stea_reg_Drug_dose[["beta"]]
Stea_reg_Drug_dose_tab <- Stea_reg_Drug_dose_tab[-c(1),]
Stea_reg_Drug_dose_tab <- Stea_reg_Drug_dose_tab[-c(1)]
Stea_reg_Drug_dose_tab$k <- Stea_reg_Drug_dose[["k"]]
Stea_reg_Drug_dose_tab$r2 <- Stea_reg_Drug_dose[["R2"]]
Stea_reg_Drug_dose_tab$var <- "Drug_dose"

Stea_reg_Indiv_drug_class_3 <- metareg(Stea_metan_drugIndiv, Indiv_drug_class_3)
Stea_reg_Indiv_drug_class_3_tab <- data.frame(Stea_reg_Indiv_drug_class_3[["beta"]])
Stea_reg_Indiv_drug_class_3_tab$se <- Stea_reg_Indiv_drug_class_3[["se"]]
Stea_reg_Indiv_drug_class_3_tab$pval <- Stea_reg_Indiv_drug_class_3[["pval"]]
Stea_reg_Indiv_drug_class_3_tab$beta <- Stea_reg_Indiv_drug_class_3[["beta"]]
Stea_reg_Indiv_drug_class_3_tab <- Stea_reg_Indiv_drug_class_3_tab[-c(1),]
Stea_reg_Indiv_drug_class_3_tab <- Stea_reg_Indiv_drug_class_3_tab[-c(1)]
Stea_reg_Indiv_drug_class_3_tab$k <- Stea_reg_Indiv_drug_class_3[["k"]]
Stea_reg_Indiv_drug_class_3_tab$r2 <- NA
Stea_reg_Indiv_drug_class_3_tab$var <- rownames(Stea_reg_Indiv_drug_class_3_tab)
Stea_reg_Indiv_drug_class_3_overall_tab <- data.frame(Stea_reg_Indiv_drug_class_3[["QMp"]])
Stea_reg_Indiv_drug_class_3_overall_tab$se <- NA
Stea_reg_Indiv_drug_class_3_overall_tab$pval <- Stea_reg_Indiv_drug_class_3[["QMp"]]
Stea_reg_Indiv_drug_class_3_overall_tab$beta <- NA
Stea_reg_Indiv_drug_class_3_overall_tab <- Stea_reg_Indiv_drug_class_3_overall_tab[-c(1)]
Stea_reg_Indiv_drug_class_3_overall_tab$k <- Stea_reg_Indiv_drug_class_3[["k"]]
Stea_reg_Indiv_drug_class_3_overall_tab$r2 <- Stea_reg_Indiv_drug_class_3[["R2"]]
Stea_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall"
Stea_reg_Indiv_drug_class_3_tab <- rbind(Stea_reg_Indiv_drug_class_3_tab, Stea_reg_Indiv_drug_class_3_overall_tab)

Stea_reg_Model_simple <- metareg(Stea_metan_model, Model_simple)
Stea_reg_Model_simple_tab <- data.frame(Stea_reg_Model_simple[["beta"]])
Stea_reg_Model_simple_tab$se <- Stea_reg_Model_simple[["se"]]
Stea_reg_Model_simple_tab$pval <- Stea_reg_Model_simple[["pval"]]
Stea_reg_Model_simple_tab$beta <- Stea_reg_Model_simple[["beta"]]
Stea_reg_Model_simple_tab <- Stea_reg_Model_simple_tab[-c(1),]
Stea_reg_Model_simple_tab <- Stea_reg_Model_simple_tab[-c(1)]
Stea_reg_Model_simple_tab$k <- Stea_reg_Model_simple[["k"]]
Stea_reg_Model_simple_tab$r2 <- NA
Stea_reg_Model_simple_tab$var <- rownames(Stea_reg_Model_simple_tab)
Stea_reg_Model_simple_overall_tab <- data.frame(Stea_reg_Model_simple[["QMp"]])
Stea_reg_Model_simple_overall_tab$se <- NA
Stea_reg_Model_simple_overall_tab$pval <- Stea_reg_Model_simple[["QMp"]]
Stea_reg_Model_simple_overall_tab$beta <- NA
Stea_reg_Model_simple_overall_tab <- Stea_reg_Model_simple_overall_tab[-c(1)]
Stea_reg_Model_simple_overall_tab$k <- Stea_reg_Model_simple[["k"]]
Stea_reg_Model_simple_overall_tab$r2 <- Stea_reg_Model_simple[["R2"]]
Stea_reg_Model_simple_overall_tab$var <- "Model_simple_overall"
Stea_reg_Model_simple_tab <- rbind(Stea_reg_Model_simple_tab, Stea_reg_Model_simple_overall_tab)

Stea_reg_Background_simple <- metareg(Stea_metan_bg, Background_simple)
Stea_reg_Background_simple_tab <- data.frame(Stea_reg_Background_simple[["beta"]])
Stea_reg_Background_simple_tab$se <- Stea_reg_Background_simple[["se"]]
Stea_reg_Background_simple_tab$pval <- Stea_reg_Background_simple[["pval"]]
Stea_reg_Background_simple_tab$beta <- Stea_reg_Background_simple[["beta"]]
Stea_reg_Background_simple_tab <- Stea_reg_Background_simple_tab[-c(1),]
Stea_reg_Background_simple_tab <- Stea_reg_Background_simple_tab[-c(1)]
Stea_reg_Background_simple_tab$k <- Stea_reg_Background_simple[["k"]]
Stea_reg_Background_simple_tab$r2 <- NA
Stea_reg_Background_simple_tab$var <- rownames(Stea_reg_Background_simple_tab)
Stea_reg_Background_simple_overall_tab <- data.frame(Stea_reg_Background_simple[["QMp"]])
Stea_reg_Background_simple_overall_tab$se <- NA
Stea_reg_Background_simple_overall_tab$pval <- Stea_reg_Background_simple[["QMp"]]
Stea_reg_Background_simple_overall_tab$beta <- NA
Stea_reg_Background_simple_overall_tab <- Stea_reg_Background_simple_overall_tab[-c(1)]
Stea_reg_Background_simple_overall_tab$k <- Stea_reg_Background_simple[["k"]]
Stea_reg_Background_simple_overall_tab$r2 <- Stea_reg_Background_simple[["R2"]]
Stea_reg_Background_simple_overall_tab$var <- "Background_simple_overall"
Stea_reg_Background_simple_tab <- rbind(Stea_reg_Background_simple_tab, Stea_reg_Background_simple_overall_tab)

Stea_metareg_sumtab <- rbind(Stea_reg_Qual_score_tab, Stea_reg_Protocol_tab, Stea_reg_Randomisation_tab, Stea_reg_Blinding_tab, Stea_reg_Power_calculation_tab, Stea_reg_Chol_per_tab, Stea_reg_log_FructGluc_per_tab, Stea_reg_log_Sucr_kcal_tab, Stea_reg_log_Fat_kcal_tab, Stea_reg_log_Age_start_tab, Stea_reg_log_Duration_tab, Stea_reg_log_Age_end_tab, Stea_reg_log_Wt_change_tab, Stea_reg_log_Gluc_change_tab, Stea_reg_log_Insul_change_tab, Stea_reg_Sex_tab, Stea_reg_Drug_dose_tab, Stea_reg_Indiv_drug_class_3_tab, Stea_reg_Model_simple_tab, Stea_reg_Background_simple_tab)

Stea_metareg_sumtab$text <- paste(format(round(Stea_metareg_sumtab$beta, 1), nsmall = 1), format(round(Stea_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Stea_metareg_sumtab$text <- paste(Stea_metareg_sumtab$text, "", sep = ")", collapse = NULL)
Stea_metareg_sumtab$pval_2dig <- paste((signif(Stea_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
Stea_metareg_sumtab$r2_2dig <- paste(format(round(Stea_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(Stea_metareg_sumtab,file="Stea_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="Stea_bubble_Wt_change.pdf",width=6,height=6)
Stea_bubble_Wt_change <- bubble(Stea_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-1,.5))
Stea_bubble_Wt_change
dev.off()

pdf(file="Stea_bubble_Insul_change.pdf",width=6,height=6)
Stea_bubble_Insul_change <- bubble(Stea_reg_log_Insul_change, xlab = "Log fasting insulin difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-2,1), ylim = c(-4, 1))
Stea_bubble_Insul_change
dev.off()

pdf(file="Stea_bubble_Gluc_change.pdf",width=6,height=6)
Stea_bubble_Gluc_change <- bubble(Stea_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-1,.5), ylim = c(-4, 2))
Stea_bubble_Gluc_change
dev.off()


##########

##### run multiple meta-regression

## create data subset including >3 for each model >3 for background, and >3 for each drug

## start with dataset containing >3 for each background = Stea_data_min3bg

Stea_data_min3bg_modelcounts <- Stea_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
Stea_data_min3bg_modelcounts_sum <- Stea_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

Stea_data_min3bg_model_less3 = subset(Stea_data_min3bg_modelcounts_sum, n <3)
Stea_data_min3bg_model_less3$Model_simple <- droplevels(Stea_data_min3bg_model_less3$Model_simple)
Stea_data_min3bg_model_droplist <- Stea_data_min3bg_model_less3$Model_simple

Stea_multimetareg_data <- Stea_data_min3bg %>% filter(!Model_simple %in% Stea_data_min3bg_model_droplist)



## run multiple meta-regression

## create data subset including >3 for each model and >3 for background

## start with dataset containing >3 for each background = Stea_data_min3bg

Stea_data_min3bg_modelcounts <- Stea_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
Stea_data_min3bg_modelcounts_sum <- Stea_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

Stea_data_min3bg_model_less3 = subset(Stea_data_min3bg_modelcounts_sum, n <3)
Stea_data_min3bg_model_less3$Model_simple <- droplevels(Stea_data_min3bg_model_less3$Model_simple)
Stea_data_min3bg_model_droplist <- Stea_data_min3bg_model_less3$Model_simple

Stea_multimetareg_data <- Stea_data_min3bg %>% filter(!Model_simple %in% Stea_data_min3bg_model_droplist)

## Run metan

Stea_multimetareg_metan <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")


library(metafor)

Stea_multmetareg_tab <- data.frame(Stea_multimetareg_metan$studlab)
Stea_multmetareg_tab$yi <- Stea_multimetareg_metan[["TE"]]
Stea_multmetareg_tab$sei <- Stea_multimetareg_metan[["seTE"]]
Stea_multmetareg_tab$Model_simple <- Stea_multimetareg_metan[["data"]][["Model_simple"]]
Stea_multmetareg_tab$Background_simple <- Stea_multimetareg_metan[["data"]][["Background_simple"]]
Stea_multmetareg_tab$Sex <- Stea_multimetareg_metan[["data"]][["Sex"]]
Stea_multmetareg_tab$Indiv_drug_class_3 <- Stea_multimetareg_metan[["data"]][["Indiv_drug_class_3"]]
Stea_multmetareg_tab$log_Fat_kcal <- Stea_multimetareg_metan[["data"]][["log_Fat_kcal"]]
Stea_multmetareg_tab$log_Age_start <- Stea_multimetareg_metan[["data"]][["log_Age_start"]]
Stea_multmetareg_tab$log_Age_end <- Stea_multimetareg_metan[["data"]][["log_Age_end"]]
Stea_multmetareg_tab$log_Duration <- Stea_multimetareg_metan[["data"]][["log_Duration"]]
Stea_multmetareg_tab$log_Wt_change <- Stea_multimetareg_metan[["data"]][["log_Wt_change"]]
Stea_multmetareg_tab$log_Gluc_change <- Stea_multimetareg_metan[["data"]][["log_Gluc_change"]]
Stea_multmetareg_tab$log_Insul_change <- Stea_multimetareg_metan[["data"]][["log_Insul_change"]]
Stea_multmetareg_tab$Qual_score <- Stea_multimetareg_metan[["data"]][["Qual_score"]]

Stea_multmetareg_tab_cor <- cor(Stea_multmetareg_tab[,8:15], use="complete.obs")
Stea_multmetareg_tab_cor

library(PerformanceAnalytics)
chart.Correlation(Stea_multmetareg_tab[,8:15], use="complete.obs")

## high correlation between age_start, age,_end, and duration, therefore drop age_end from model

## also have to drop insulin change due to insufficient data

library(dmetar)

Stea_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = Stea_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE)
Stea_multi_intereference1

sink("Stea_multi_intereference1.txt")
print(Stea_multi_intereference1)
sink()

## run multi-metareg for top model 1

Stea_multmetareg_1 <- rma(yi = yi, sei = sei, data = Stea_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + Background_simple + log_Gluc_change, test="knha")

Stea_multmetareg_1_tab <- coef(summary(Stea_multmetareg_1))
Stea_multmetareg_1_tab$rownames <- rownames(Stea_multmetareg_1_tab)

Stea_multmetareg_1_tab$mod1_text <- paste(format(round(Stea_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(Stea_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Stea_multmetareg_1_tab$mod1_text <- paste(Stea_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL)
Stea_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(Stea_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL)

## check robustness using permutation test

Stea_multmetareg_1_permut <- permutest(Stea_multmetareg_1)

sink("Stea_multmetareg_1_permut.txt")
print(Stea_multmetareg_1_permut)
sink()


####

## repeat but also include drug class in model, therefore drop where <3 unique studies for any drug class
## insufficient data to do by individual drug

Stea_multimetareg_data_drugcounts <- Stea_multimetareg_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
Stea_multimetareg_data_drugcounts_sum <- Stea_multimetareg_data_drugcounts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

Stea_multimetareg_data_drugcounts_less3 = subset(Stea_multimetareg_data_drugcounts_sum, n <3)
Stea_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all <- droplevels(Stea_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all)
Stea_multimetareg_data_drug_droplist <- Stea_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all

Stea_multimetareg_data_2 <- Stea_multimetareg_data %>% filter(!Drug_Class_new_1_all %in% Stea_multimetareg_data_drug_droplist)


## Run metan

Stea_multimetareg_metan_2 <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_multimetareg_data_2, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

library(metafor)

Stea_multmetareg_tab_2 <- data.frame(Stea_multimetareg_metan_2$studlab)
Stea_multmetareg_tab_2$yi <- Stea_multimetareg_metan_2[["TE"]]
Stea_multmetareg_tab_2$sei <- Stea_multimetareg_metan_2[["seTE"]]
Stea_multmetareg_tab_2$Model_simple <- Stea_multimetareg_metan_2[["data"]][["Model_simple"]]
Stea_multmetareg_tab_2$Background_simple <- Stea_multimetareg_metan_2[["data"]][["Background_simple"]]
Stea_multmetareg_tab_2$Sex <- Stea_multimetareg_metan_2[["data"]][["Sex"]]
Stea_multmetareg_tab_2$Drug_Class_new_1_all <- Stea_multimetareg_metan_2[["data"]][["Drug_Class_new_1_all"]]
Stea_multmetareg_tab_2$log_Fat_kcal <- Stea_multimetareg_metan_2[["data"]][["log_Fat_kcal"]]
Stea_multmetareg_tab_2$log_Age_start <- Stea_multimetareg_metan_2[["data"]][["log_Age_start"]]
Stea_multmetareg_tab_2$log_Age_end <- Stea_multimetareg_metan_2[["data"]][["log_Age_end"]]
Stea_multmetareg_tab_2$log_Duration <- Stea_multimetareg_metan_2[["data"]][["log_Duration"]]
Stea_multmetareg_tab_2$log_Wt_change <- Stea_multimetareg_metan_2[["data"]][["log_Wt_change"]]
Stea_multmetareg_tab_2$log_Gluc_change <- Stea_multimetareg_metan_2[["data"]][["log_Gluc_change"]]
Stea_multmetareg_tab_2$log_Insul_change <- Stea_multimetareg_metan_2[["data"]][["log_Insul_change"]]
Stea_multmetareg_tab_2$Qual_score <- Stea_multimetareg_metan_2[["data"]][["Qual_score"]]

Stea_multmetareg_tab_2_cor <- cor(Stea_multmetareg_tab_2[,8:15], use="complete.obs")
Stea_multmetareg_tab_2_cor

library(PerformanceAnalytics)
chart.Correlation(Stea_multmetareg_tab_2[,8:15], use="complete.obs")

## high correlation between age_start, age,_end, and duration, therefore drop age_end from model, as well as previous redundant mods (age, duration, qual score), also had to remove glucose

library(dmetar)

Stea_multi_intereference2 <- multimodel.inference(TE = "yi", seTE = "sei", data = Stea_multmetareg_tab_2, predictors = c("log_Fat_kcal", "Sex", "log_Wt_change", "Model_simple", "Background_simple", "Drug_Class_new_1_all"), interaction = FALSE)
Stea_multi_intereference2


## run multi-metareg for top model

Stea_multmetareg_2 <- rma(yi = yi, sei = sei, data = Stea_multmetareg_tab_2, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + Background_simple + Model_simple, test="knha")

Stea_multmetareg_2_tab <- coef(summary(Stea_multmetareg_2))
Stea_multmetareg_2_tab$rownames <- rownames(Stea_multmetareg_2_tab)

Stea_multmetareg_2_tab$mod2_text <- paste(format(round(Stea_multmetareg_2_tab$estimate, 1), nsmall = 1), format(round(Stea_multmetareg_2_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Stea_multmetareg_2_tab$mod2_text <- paste(Stea_multmetareg_2_tab$mod2_text, "", sep = ")", collapse = NULL)
Stea_multmetareg_2_tab$mod2_pval_2dig <- paste((signif(Stea_multmetareg_2_tab$pval, digits=2)), "", sep = "", collapse = NULL)

Stea_multmetareg_sumtab <- merge(Stea_multmetareg_1_tab, Stea_multmetareg_2_tab, by="rownames", all=TRUE)
write.table(Stea_multmetareg_sumtab, "Stea_multmetareg_sumtab.csv", sep=",")

## check robustness using permutation test

Stea_multmetareg_2_permut <- permutest(Stea_multmetareg_2)

sink("Stea_multmetareg_2_permut.txt")
print(Stea_multmetareg_2_permut)
sink()



## See if meta-regression results change after removal of weight-loss diets

library(tidyverse)

Stea_NoWtLoss_data <- Stea_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD')


Stea_NoWtLoss_metan_full <- metacont(Stea_Int_size, Stea_Int_Mean, Stea_Int_SD, Stea_Pla_size, Stea_Pla_Mean, Stea_Pla_SD, data = Stea_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Stea_NoWtLoss_reg_log_Wt_change <- metareg(Stea_NoWtLoss_metan_full, log_Wt_change)
Stea_NoWtLoss_reg_log_Wt_change_tab <- data.frame(Stea_NoWtLoss_reg_log_Wt_change[["beta"]])
Stea_NoWtLoss_reg_log_Wt_change_tab$se <- Stea_NoWtLoss_reg_log_Wt_change[["se"]]
Stea_NoWtLoss_reg_log_Wt_change_tab$pval <- Stea_NoWtLoss_reg_log_Wt_change[["pval"]]
Stea_NoWtLoss_reg_log_Wt_change_tab$beta <- Stea_NoWtLoss_reg_log_Wt_change[["beta"]]
Stea_NoWtLoss_reg_log_Wt_change_tab <- Stea_NoWtLoss_reg_log_Wt_change_tab[-c(1),]
Stea_NoWtLoss_reg_log_Wt_change_tab <- Stea_NoWtLoss_reg_log_Wt_change_tab[-c(1)]
Stea_NoWtLoss_reg_log_Wt_change_tab$k <- Stea_NoWtLoss_reg_log_Wt_change[["k"]]
Stea_NoWtLoss_reg_log_Wt_change_tab$r2 <- Stea_NoWtLoss_reg_log_Wt_change[["R2"]]
Stea_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change"

Stea_NoWtLoss_reg_log_Gluc_change <- metareg(Stea_NoWtLoss_metan_full, log_Gluc_change)
Stea_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(Stea_NoWtLoss_reg_log_Gluc_change[["beta"]])
Stea_NoWtLoss_reg_log_Gluc_change_tab$se <- Stea_NoWtLoss_reg_log_Gluc_change[["se"]]
Stea_NoWtLoss_reg_log_Gluc_change_tab$pval <- Stea_NoWtLoss_reg_log_Gluc_change[["pval"]]
Stea_NoWtLoss_reg_log_Gluc_change_tab$beta <- Stea_NoWtLoss_reg_log_Gluc_change[["beta"]]
Stea_NoWtLoss_reg_log_Gluc_change_tab <- Stea_NoWtLoss_reg_log_Gluc_change_tab[-c(1),]
Stea_NoWtLoss_reg_log_Gluc_change_tab <- Stea_NoWtLoss_reg_log_Gluc_change_tab[-c(1)]
Stea_NoWtLoss_reg_log_Gluc_change_tab$k <- Stea_NoWtLoss_reg_log_Gluc_change[["k"]]
Stea_NoWtLoss_reg_log_Gluc_change_tab$r2 <- Stea_NoWtLoss_reg_log_Gluc_change[["R2"]]
Stea_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

Stea_NoWtLoss_reg_log_Insul_change <- metareg(Stea_NoWtLoss_metan_full, log_Insul_change)
Stea_NoWtLoss_reg_log_Insul_change_tab <- data.frame(Stea_NoWtLoss_reg_log_Insul_change[["beta"]])
Stea_NoWtLoss_reg_log_Insul_change_tab$se <- Stea_NoWtLoss_reg_log_Insul_change[["se"]]
Stea_NoWtLoss_reg_log_Insul_change_tab$pval <- Stea_NoWtLoss_reg_log_Insul_change[["pval"]]
Stea_NoWtLoss_reg_log_Insul_change_tab$beta <- Stea_NoWtLoss_reg_log_Insul_change[["beta"]]
Stea_NoWtLoss_reg_log_Insul_change_tab <- Stea_NoWtLoss_reg_log_Insul_change_tab[-c(1),]
Stea_NoWtLoss_reg_log_Insul_change_tab <- Stea_NoWtLoss_reg_log_Insul_change_tab[-c(1)]
Stea_NoWtLoss_reg_log_Insul_change_tab$k <- Stea_NoWtLoss_reg_log_Insul_change[["k"]]
Stea_NoWtLoss_reg_log_Insul_change_tab$r2 <- Stea_NoWtLoss_reg_log_Insul_change[["R2"]]
Stea_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change"

Stea_NoWtLoss_metareg_sumtab <- rbind(Stea_NoWtLoss_reg_log_Wt_change_tab, Stea_NoWtLoss_reg_log_Gluc_change_tab, Stea_NoWtLoss_reg_log_Insul_change_tab)

Stea_NoWtLoss_metareg_sumtab$text <- paste(format(round(Stea_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(Stea_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Stea_NoWtLoss_metareg_sumtab$text <- paste(Stea_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL)
Stea_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(Stea_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
Stea_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(Stea_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(Stea_NoWtLoss_metareg_sumtab,file="Stea_NoWtLoss_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="Stea_NoWtLoss_bubble_weight_change.pdf",width=6,height=6)
Stea_NoWtLoss_bubble_weight_change <- bubble(Stea_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-1,0.5), ylim = c(-4,1))
Stea_NoWtLoss_bubble_weight_change
dev.off()


pdf(file="Stea_NoWtLoss_bubble_gluc_change.pdf",width=6,height=6)
Stea_NoWtLoss_bubble_gluc_change <- bubble(Stea_NoWtLoss_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-1, 0.5), ylim = c(-4,2))
Stea_NoWtLoss_bubble_gluc_change
dev.off()

pdf(file="Stea_NoWtLoss_bubble_Insul_change.pdf",width=6,height=6)
Stea_NoWtLoss_bubble_Insul_change <- bubble(Stea_NoWtLoss_reg_log_Insul_change, xlab = "Log fasting insulin difference intervention/placebo", ylab = "Mean difference in steatosis grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, xlim = c(-2,.5), ylim = c(-4, 2))
Stea_NoWtLoss_bubble_Insul_change
dev.off()


#### Lob Inf analysis

## following on from Stea analysis

setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/LobIn_out")

########

## Analysis for histological lobular inflammation grade (LobIn)

########


## Power analysis
library(pwr)

## calculate common SD
full_data$LobIn_Int_SD2 <- full_data$LobIn_Int_SD*full_data$LobIn_Int_SD
full_data$LobIn_Pla_SD2 <- full_data$LobIn_Pla_SD*full_data$LobIn_Pla_SD
full_data$LobIn_comm_SD <- sqrt(((full_data$LobIn_Int_SD2+full_data$LobIn_Pla_SD2)/2))
full_data$LobIn_m_diff <- full_data$LobIn_Pla_Mean-full_data$LobIn_Int_Mean
full_data$LobIn_eff_size <- full_data$LobIn_m_diff/full_data$LobIn_comm_SD

library(tidyr)

LobIn_data <- full_data
LobIn_data <- LobIn_data %>% drop_na(LobIn_eff_size)

LobIn_data$power <- pwr.t2n.test(n1 = LobIn_data$LobIn_Int_size, n2 = LobIn_data$LobIn_Pla_size, d = LobIn_data$LobIn_eff_size)$power

write.table(LobIn_data$power,file="LobIn_data_power.csv",sep=",")

hist(LobIn_data$power)

LobIn_dens_power <- density(LobIn_data$power)

pdf(file="LobIn_kernel_power_v1.pdf")
plot(LobIn_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)")
polygon(LobIn_dens_power, col="red", border="blue")
dev.off()


## load packages for metan
library(dmetar)
library(meta)
library(metafor)
library(readxl)
max.print = 100000

## drop where <3 unique studies for any drug class
LobIn_drugsclass_counts <- LobIn_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
LobIn_class_counts <- LobIn_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

LobIn_class_less3 = subset(LobIn_class_counts, n <3)
str(LobIn_class_less3)
LobIn_class_less3$Drug_Class_new_1_all <- droplevels(LobIn_class_less3$Drug_Class_new_1_all)
LobIn_class_droplist <- LobIn_class_less3$Drug_Class_new_1_all

LobIn_data_min3class <- LobIn_data %>% filter(!Drug_Class_new_1_all %in% LobIn_class_droplist)


## run metan
LobIn_metan_class_main <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

LobIn_metan_class <- update(LobIn_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
LobIn_metan_class_tab <- data.frame(LobIn_metan_class[["TE.random.w"]])
LobIn_metan_class_tab$drug <- LobIn_metan_class[["bylevs"]]
LobIn_metan_class_tab$SE <- LobIn_metan_class[["seTE.random.w"]]
LobIn_metan_class_tab$lower <- LobIn_metan_class[["lower.random.w"]]
LobIn_metan_class_tab$upper <- LobIn_metan_class[["upper.random.w"]]
LobIn_metan_class_tab$Pz <- LobIn_metan_class[["pval.random.w"]]
LobIn_metan_class_tab$weight <- LobIn_metan_class[["w.random.w"]]
LobIn_metan_class_tab$k <- LobIn_metan_class[["k.w"]]
LobIn_metan_class_tab$controls <- LobIn_metan_class[["n.c.w"]]
LobIn_metan_class_tab$experimental <- LobIn_metan_class[["n.e.w"]]
LobIn_metan_class_tab$Q <- LobIn_metan_class[["Q.w"]]
LobIn_metan_class_tab$Pq <- LobIn_metan_class[["pval.Q.w"]]
LobIn_metan_class_tab$tau <- LobIn_metan_class[["tau.w"]]
LobIn_metan_class_tab$I2 <- LobIn_metan_class[["I2.w"]]
LobIn_metan_class_tab <- LobIn_metan_class_tab %>% rename(MD = LobIn_metan_class...TE.random.w...)
LobIn_metan_class_tab <- LobIn_metan_class_tab[order(-LobIn_metan_class_tab$MD),]
LobIn_metan_class_tab$row_number <- 1:nrow(LobIn_metan_class_tab) 
LobIn_metan_class_tab$subgroup <- "Subgroup"
LobIn_class_counts <- LobIn_class_counts %>% rename(drug = Drug_Class_new_1_all)
LobIn_metan_class_tab <- merge(LobIn_class_counts, LobIn_metan_class_tab, by="drug")

LobIn_metan_class_tab_overall <- data.frame(LobIn_metan_class[["TE.random"]])
LobIn_metan_class_tab_overall$drug <- "Overall"
LobIn_metan_class_tab_overall$SE <- LobIn_metan_class[["seTE.random"]]
LobIn_metan_class_tab_overall$lower <- LobIn_metan_class[["lower.random"]]
LobIn_metan_class_tab_overall$upper <- LobIn_metan_class[["upper.random"]]
LobIn_metan_class_tab_overall$Pz <- LobIn_metan_class[["pval.random"]]
LobIn_metan_class_tab_overall$weight <- (max(LobIn_metan_class_tab$weight)*2)
LobIn_metan_class_tab_overall$k <- LobIn_metan_class[["k"]]
LobIn_metan_class_tab_overall$controls <- sum(LobIn_metan_class_tab$controls)
LobIn_metan_class_tab_overall$experimental <- sum(LobIn_metan_class_tab$experimental)
LobIn_metan_class_tab_overall$Q <- LobIn_metan_class[["Q"]]
LobIn_metan_class_tab_overall$Pq <- LobIn_metan_class[["pval.Q"]]
LobIn_metan_class_tab_overall$tau <- LobIn_metan_class[["tau"]]
LobIn_metan_class_tab_overall$I2 <- LobIn_metan_class[["I2"]]
LobIn_metan_class_tab_overall <- LobIn_metan_class_tab_overall %>% rename(MD = LobIn_metan_class...TE.random...)
LobIn_metan_class_tab_overall$row_number <- ((nrow(LobIn_metan_class_tab))+1)
LobIn_metan_class_tab_overall$subgroup <- "Overall"
LobIn_metan_class_tab_overall$n <- sum(LobIn_metan_class_tab$n)
LobIn_metan_class_sumtab <- rbind(LobIn_metan_class_tab, LobIn_metan_class_tab_overall)
LobIn_metan_class_sumtab$weight <- as.numeric(LobIn_metan_class_sumtab$weight)
LobIn_metan_class_sumtab$row_number <- as.numeric(LobIn_metan_class_sumtab$row_number)
LobIn_metan_class_sumtab$subgroup <- as.factor(LobIn_metan_class_sumtab$subgroup)
LobIn_metan_class_sumtab$total = LobIn_metan_class_sumtab$controls + LobIn_metan_class_sumtab$experimental

LobIn_metan_class_sumtab$text <- paste(format(round(LobIn_metan_class_sumtab$MD, 1), nsmall = 1), format(round(LobIn_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
LobIn_metan_class_sumtab$text <- paste(LobIn_metan_class_sumtab$text, format(round(LobIn_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
LobIn_metan_class_sumtab$text <- paste(LobIn_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

LobIn_metan_class_sumtab$SE_1dig <- paste(format(round(LobIn_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
LobIn_metan_class_sumtab$Pz_1dig <- paste((signif(LobIn_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
LobIn_metan_class_sumtab$tI2_2dig <- paste(format(round(LobIn_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
LobIn_metan_class_sumtab$tau_1dig <- paste(format(round(LobIn_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
LobIn_metan_class_sumtab$Pq_1dig <- paste((signif(LobIn_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(LobIn_metan_class_sumtab,file="LobIn_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(LobIn_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(LobIn_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(LobIn_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = LobIn_metan_class_tab_overall$lower
overall_max = LobIn_metan_class_tab_overall$upper

LobIn_metan_class_ybreaks <- nrow(LobIn_metan_class_sumtab)
LobIn_metan_class_sumtab <- LobIn_metan_class_sumtab[order(LobIn_metan_class_sumtab$row_number),]

LobIn_metan_class_forest <- ggplot(data= LobIn_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: LobIn_metan_class_ybreaks, labels = LobIn_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.7, 1.2), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-2.7, xmax=-2, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=LobIn_metan_class_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=LobIn_metan_class_sumtab, aes(x=-2.5, label=k), size = 3.5, hjust=0) + geom_text(data=LobIn_metan_class_sumtab, aes(x=-2.2, label=total), size = 3.5, hjust=0)


pdf(file="LobIn_metan_class_forest.pdf",width=9,height=4)
LobIn_metan_class_forest
dev.off()

#####################

#######

## bias analysis

LobIn_class_eggers <- eggers.test(x = LobIn_metan_class_main)
LobIn_class_eggers
sink("LobIn_class_eggers.txt")
print(LobIn_class_eggers)
sink()

LobIn_class_trimfill <- trimfill(LobIn_metan_class_main)
LobIn_class_trimfill
sink("LobIn_class_trimfill.txt")
print(LobIn_class_trimfill)
sink()

pdf(file="LobIn_class_funnel.pdf")
funnel(LobIn_class_trimfill, xlab="Mean difference in hepatic LobIn (%)", xlim=c(-4,4), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-3.5, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue"))
dev.off()

## use Baujat plot to look for outliers

pdf(file="LobIn_class_baujat.pdf")
LobIn_class_baujat <- baujat(LobIn_metan_class_main)
LobIn_class_baujat
dev.off()

## look for outliers based on SD

LobIn_commSD_mean <- mean(LobIn_data$LobIn_comm_SD, na.rm=TRUE)
LobIn_commSD_SD <- sd(LobIn_data$LobIn_comm_SD, na.rm=TRUE)

LobIn_commSD_norm <- dnorm(LobIn_data$LobIn_comm_SD, mean = LobIn_commSD_mean, sd = LobIn_commSD_SD, log = FALSE)
LobIn_commSD_norm <- as.data.frame(LobIn_commSD_norm)
LobIn_commSD_norm$LobIn_comm_SD <- LobIn_data$LobIn_comm_SD
LobIn_commSD_norm$Paper <- LobIn_data$Paper

pdf(file = "LobIn_commSD_norm.pdf")
plot(LobIn_commSD_norm$LobIn_comm_SD, LobIn_commSD_norm$LobIn_commSD_norm)
dev.off()

## exclude studies with LobIn_comm_SD >1.5 or high contribution to heterogeneity on baujat plot

LobIn_NoOutlier_data = subset(LobIn_data, LobIn_comm_SD <1.5)
LobIn_NoOutlier_data <- LobIn_NoOutlier_data %>% filter(Paper != "Ding 2018_2 " & Paper != "Assy 2006_3" & Paper != "Assy 2006_2" & Paper != "Konuma 2015" & Paper != "Tang 2015" & Paper != "Ishii 2009" & Paper != "Zhang 2009b" & Paper != "Valdecantos 2017_2" & Paper != "Pais 2014_1" & Paper != "Afrin 2017")


#######


## re-rerun after outliers excluded


## drop where <3 unique studies for any drug class
LobIn_NoOutlier_drugsclass_counts <- LobIn_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
LobIn_NoOutlier_class_counts <- LobIn_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

LobIn_NoOutlier_class_less3 = subset(LobIn_NoOutlier_class_counts, n <3)
str(LobIn_NoOutlier_class_less3)
LobIn_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(LobIn_NoOutlier_class_less3$Drug_Class_new_1_all)
LobIn_NoOutlier_class_droplist <- LobIn_NoOutlier_class_less3$Drug_Class_new_1_all

LobIn_NoOutlier_data_min3class <- LobIn_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% LobIn_NoOutlier_class_droplist)


## run metan
LobIn_NoOutlier_metan_class_main <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

LobIn_NoOutlier_metan_class <- update(LobIn_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
LobIn_NoOutlier_metan_class_tab <- data.frame(LobIn_NoOutlier_metan_class[["TE.random.w"]])
LobIn_NoOutlier_metan_class_tab$drug <- LobIn_NoOutlier_metan_class[["bylevs"]]
LobIn_NoOutlier_metan_class_tab$SE <- LobIn_NoOutlier_metan_class[["seTE.random.w"]]
LobIn_NoOutlier_metan_class_tab$lower <- LobIn_NoOutlier_metan_class[["lower.random.w"]]
LobIn_NoOutlier_metan_class_tab$upper <- LobIn_NoOutlier_metan_class[["upper.random.w"]]
LobIn_NoOutlier_metan_class_tab$Pz <- LobIn_NoOutlier_metan_class[["pval.random.w"]]
LobIn_NoOutlier_metan_class_tab$weight <- LobIn_NoOutlier_metan_class[["w.random.w"]]
LobIn_NoOutlier_metan_class_tab$k <- LobIn_NoOutlier_metan_class[["k.w"]]
LobIn_NoOutlier_metan_class_tab$controls <- LobIn_NoOutlier_metan_class[["n.c.w"]]
LobIn_NoOutlier_metan_class_tab$experimental <- LobIn_NoOutlier_metan_class[["n.e.w"]]
LobIn_NoOutlier_metan_class_tab$Q <- LobIn_NoOutlier_metan_class[["Q.w"]]
LobIn_NoOutlier_metan_class_tab$Pq <- LobIn_NoOutlier_metan_class[["pval.Q.w"]]
LobIn_NoOutlier_metan_class_tab$tau <- LobIn_NoOutlier_metan_class[["tau.w"]]
LobIn_NoOutlier_metan_class_tab$I2 <- LobIn_NoOutlier_metan_class[["I2.w"]]
LobIn_NoOutlier_metan_class_tab <- LobIn_NoOutlier_metan_class_tab %>% rename(MD = LobIn_NoOutlier_metan_class...TE.random.w...)
LobIn_NoOutlier_metan_class_tab <- LobIn_NoOutlier_metan_class_tab[order(-LobIn_NoOutlier_metan_class_tab$MD),]
LobIn_NoOutlier_metan_class_tab <- LobIn_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n())
LobIn_NoOutlier_metan_class_tab$subgroup <- "Subgroup"
LobIn_NoOutlier_class_counts <- LobIn_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all)
LobIn_NoOutlier_metan_class_tab <- merge(LobIn_NoOutlier_class_counts, LobIn_NoOutlier_metan_class_tab, by="drug")

LobIn_NoOutlier_metan_class_tab_overall <- data.frame(LobIn_NoOutlier_metan_class[["TE.random"]])
LobIn_NoOutlier_metan_class_tab_overall$drug <- "Overall"
LobIn_NoOutlier_metan_class_tab_overall$SE <- LobIn_NoOutlier_metan_class[["seTE.random"]]
LobIn_NoOutlier_metan_class_tab_overall$lower <- LobIn_NoOutlier_metan_class[["lower.random"]]
LobIn_NoOutlier_metan_class_tab_overall$upper <- LobIn_NoOutlier_metan_class[["upper.random"]]
LobIn_NoOutlier_metan_class_tab_overall$Pz <- LobIn_NoOutlier_metan_class[["pval.random"]]
LobIn_NoOutlier_metan_class_tab_overall$weight <- (max(LobIn_NoOutlier_metan_class_tab$weight)*2)
LobIn_NoOutlier_metan_class_tab_overall$k <- LobIn_NoOutlier_metan_class[["k"]]
LobIn_NoOutlier_metan_class_tab_overall$controls <- sum(LobIn_NoOutlier_metan_class_tab$controls)
LobIn_NoOutlier_metan_class_tab_overall$experimental <- sum(LobIn_NoOutlier_metan_class_tab$experimental)
LobIn_NoOutlier_metan_class_tab_overall$Q <- LobIn_NoOutlier_metan_class[["Q"]]
LobIn_NoOutlier_metan_class_tab_overall$Pq <- LobIn_NoOutlier_metan_class[["pval.Q"]]
LobIn_NoOutlier_metan_class_tab_overall$tau <- LobIn_NoOutlier_metan_class[["tau"]]
LobIn_NoOutlier_metan_class_tab_overall$I2 <- LobIn_NoOutlier_metan_class[["I2"]]
LobIn_NoOutlier_metan_class_tab_overall <- LobIn_NoOutlier_metan_class_tab_overall %>% rename(MD = LobIn_NoOutlier_metan_class...TE.random...)
LobIn_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(LobIn_NoOutlier_metan_class_tab))+1)
LobIn_NoOutlier_metan_class_tab_overall$subgroup <- "Overall"
LobIn_NoOutlier_metan_class_tab_overall$n <- sum(LobIn_NoOutlier_metan_class_tab$n)
LobIn_NoOutlier_metan_class_sumtab <- rbind(LobIn_NoOutlier_metan_class_tab, LobIn_NoOutlier_metan_class_tab_overall)
LobIn_NoOutlier_metan_class_sumtab$weight <- as.numeric(LobIn_NoOutlier_metan_class_sumtab$weight)
LobIn_NoOutlier_metan_class_sumtab$row_number <- as.numeric(LobIn_NoOutlier_metan_class_sumtab$row_number)
LobIn_NoOutlier_metan_class_sumtab$subgroup <- as.factor(LobIn_NoOutlier_metan_class_sumtab$subgroup)
LobIn_NoOutlier_metan_class_sumtab$total = LobIn_NoOutlier_metan_class_sumtab$controls + LobIn_NoOutlier_metan_class_sumtab$experimental

LobIn_NoOutlier_metan_class_sumtab$text <- paste(format(round(LobIn_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(LobIn_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
LobIn_NoOutlier_metan_class_sumtab$text <- paste(LobIn_NoOutlier_metan_class_sumtab$text, format(round(LobIn_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
LobIn_NoOutlier_metan_class_sumtab$text <- paste(LobIn_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

LobIn_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(LobIn_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
LobIn_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(LobIn_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
LobIn_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(LobIn_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
LobIn_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(LobIn_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
LobIn_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(LobIn_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(LobIn_NoOutlier_metan_class_sumtab,file="LobIn_NoOutlier_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(LobIn_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(LobIn_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(LobIn_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = LobIn_NoOutlier_metan_class_tab_overall$lower
overall_max = LobIn_NoOutlier_metan_class_tab_overall$upper

LobIn_NoOutlier_metan_class_ybreaks <- nrow(LobIn_NoOutlier_metan_class_sumtab)
LobIn_NoOutlier_metan_class_sumtab <- LobIn_NoOutlier_metan_class_sumtab[order(LobIn_NoOutlier_metan_class_sumtab$row_number),]

LobIn_NoOutlier_metan_class_forest <- ggplot(data= LobIn_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: LobIn_NoOutlier_metan_class_ybreaks, labels = LobIn_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.7, 1.2), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-2.7, xmax=-2, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=LobIn_NoOutlier_metan_class_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=LobIn_NoOutlier_metan_class_sumtab, aes(x=-2.5, label=k), size = 3.5, hjust=0) + geom_text(data=LobIn_NoOutlier_metan_class_sumtab, aes(x=-2.2, label=total), size = 3.5, hjust=0)


pdf(file="LobIn_NoOutlier_metan_class_forest.pdf",width=9,height=5)
LobIn_NoOutlier_metan_class_forest
dev.off()

#######

## re-run using sub-grouping by individual drugs


## drop where <3 unique studies for any drug class
LobIn_drugIndiv_counts <- LobIn_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n())
LobIn_drugIndiv_sum_counts <- LobIn_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n())

LobIn_drugIndiv_less3 = subset(LobIn_drugIndiv_sum_counts, n <3)
str(LobIn_drugIndiv_less3)
LobIn_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(LobIn_drugIndiv_less3$Indiv_drug_class_3)
LobIn_drugIndiv_droplist <- LobIn_drugIndiv_less3$Indiv_drug_class_3

LobIn_data_min3drug <- LobIn_data %>% filter(!Indiv_drug_class_3 %in% LobIn_drugIndiv_droplist)


## run metan
LobIn_metan_drugIndiv <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

LobIn_metan_drugIndiv <- update(LobIn_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug")

## make summary table of results
LobIn_metan_drugIndiv_tab <- data.frame(LobIn_metan_drugIndiv[["TE.random.w"]])
LobIn_metan_drugIndiv_tab$drug <- LobIn_metan_drugIndiv[["bylevs"]]
LobIn_metan_drugIndiv_tab$SE <- LobIn_metan_drugIndiv[["seTE.random.w"]]
LobIn_metan_drugIndiv_tab$lower <- LobIn_metan_drugIndiv[["lower.random.w"]]
LobIn_metan_drugIndiv_tab$upper <- LobIn_metan_drugIndiv[["upper.random.w"]]
LobIn_metan_drugIndiv_tab$Pz <- LobIn_metan_drugIndiv[["pval.random.w"]]
LobIn_metan_drugIndiv_tab$weight <- LobIn_metan_drugIndiv[["w.random.w"]]
LobIn_metan_drugIndiv_tab$k <- LobIn_metan_drugIndiv[["k.w"]]
LobIn_metan_drugIndiv_tab$controls <- LobIn_metan_drugIndiv[["n.c.w"]]
LobIn_metan_drugIndiv_tab$experimental <- LobIn_metan_drugIndiv[["n.e.w"]]
LobIn_metan_drugIndiv_tab$Q <- LobIn_metan_drugIndiv[["Q.w"]]
LobIn_metan_drugIndiv_tab$Pq <- LobIn_metan_drugIndiv[["pval.Q.w"]]
LobIn_metan_drugIndiv_tab$tau <- LobIn_metan_drugIndiv[["tau.w"]]
LobIn_metan_drugIndiv_tab$I2 <- LobIn_metan_drugIndiv[["I2.w"]]
LobIn_metan_drugIndiv_tab <- LobIn_metan_drugIndiv_tab %>% rename(MD = LobIn_metan_drugIndiv...TE.random.w...)
LobIn_metan_drugIndiv_tab <- LobIn_metan_drugIndiv_tab[order(-LobIn_metan_drugIndiv_tab$MD),]
LobIn_metan_drugIndiv_tab <- LobIn_metan_drugIndiv_tab %>% mutate(row_number= 1:n())
LobIn_metan_drugIndiv_tab$subgroup <- "Subgroup"
LobIn_drugIndiv_sum_counts <- LobIn_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3)
LobIn_metan_drugIndiv_tab <- merge(LobIn_drugIndiv_sum_counts, LobIn_metan_drugIndiv_tab, by="drug")

LobIn_metan_drugIndiv_tab_overall <- data.frame(LobIn_metan_drugIndiv[["TE.random"]])
LobIn_metan_drugIndiv_tab_overall$drug <- "Overall"
LobIn_metan_drugIndiv_tab_overall$SE <- LobIn_metan_drugIndiv[["seTE.random"]]
LobIn_metan_drugIndiv_tab_overall$lower <- LobIn_metan_drugIndiv[["lower.random"]]
LobIn_metan_drugIndiv_tab_overall$upper <- LobIn_metan_drugIndiv[["upper.random"]]
LobIn_metan_drugIndiv_tab_overall$Pz <- LobIn_metan_drugIndiv[["pval.random"]]
LobIn_metan_drugIndiv_tab_overall$weight <- (max(LobIn_metan_drugIndiv_tab$weight)*2)
LobIn_metan_drugIndiv_tab_overall$k <- LobIn_metan_drugIndiv[["k"]]
LobIn_metan_drugIndiv_tab_overall$controls <- sum(LobIn_metan_drugIndiv_tab$controls)
LobIn_metan_drugIndiv_tab_overall$experimental <- sum(LobIn_metan_drugIndiv_tab$experimental)
LobIn_metan_drugIndiv_tab_overall$Q <- LobIn_metan_drugIndiv[["Q"]]
LobIn_metan_drugIndiv_tab_overall$Pq <- LobIn_metan_drugIndiv[["pval.Q"]]
LobIn_metan_drugIndiv_tab_overall$tau <- LobIn_metan_drugIndiv[["tau"]]
LobIn_metan_drugIndiv_tab_overall$I2 <- LobIn_metan_drugIndiv[["I2"]]
LobIn_metan_drugIndiv_tab_overall <- LobIn_metan_drugIndiv_tab_overall %>% rename(MD = LobIn_metan_drugIndiv...TE.random...)
LobIn_metan_drugIndiv_tab_overall$row_number <- ((nrow(LobIn_metan_drugIndiv_tab))+1)
LobIn_metan_drugIndiv_tab_overall$subgroup <- "Overall"
LobIn_metan_drugIndiv_tab_overall$n <- sum(LobIn_metan_drugIndiv_tab$n)
LobIn_metan_drugIndiv_sumtab <- rbind(LobIn_metan_drugIndiv_tab, LobIn_metan_drugIndiv_tab_overall)
LobIn_metan_drugIndiv_sumtab$weight <- as.numeric(LobIn_metan_drugIndiv_sumtab$weight)
LobIn_metan_drugIndiv_sumtab$row_number <- as.numeric(LobIn_metan_drugIndiv_sumtab$row_number)
LobIn_metan_drugIndiv_sumtab$subgroup <- as.factor(LobIn_metan_drugIndiv_sumtab$subgroup)
LobIn_metan_drugIndiv_sumtab$total = LobIn_metan_drugIndiv_sumtab$controls + LobIn_metan_drugIndiv_sumtab$experimental

LobIn_metan_drugIndiv_sumtab$text <- paste(format(round(LobIn_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(LobIn_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
LobIn_metan_drugIndiv_sumtab$text <- paste(LobIn_metan_drugIndiv_sumtab$text, format(round(LobIn_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
LobIn_metan_drugIndiv_sumtab$text <- paste(LobIn_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL)

LobIn_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(LobIn_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
LobIn_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(LobIn_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
LobIn_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(LobIn_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
LobIn_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(LobIn_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
LobIn_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(LobIn_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(LobIn_metan_drugIndiv_sumtab,file="LobIn_metan_drugIndiv_sumtab.csv",sep=",")

## make forest plot

label_bold <- ifelse(LobIn_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(LobIn_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(LobIn_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10")

overall_min = LobIn_metan_drugIndiv_tab_overall$lower
overall_max = LobIn_metan_drugIndiv_tab_overall$upper

LobIn_metan_drugIndiv_ybreaks <- nrow(LobIn_metan_drugIndiv_sumtab)
LobIn_metan_drugIndiv_sumtab <- LobIn_metan_drugIndiv_sumtab[order(LobIn_metan_drugIndiv_sumtab$row_number),]

LobIn_metan_drugIndiv_forest <- ggplot(data= LobIn_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: LobIn_metan_drugIndiv_ybreaks, labels = LobIn_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-3.4, 1.2), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-2.7, xmax=-2, ymin=-100, ymax=27, fill="white", size=0) + geom_text(data=LobIn_metan_drugIndiv_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=LobIn_metan_drugIndiv_sumtab, aes(x=-2.5, label=k), size = 3.5, hjust=0) + geom_text(data=LobIn_metan_drugIndiv_sumtab, aes(x=-2.2, label=total), size = 3.5, hjust=0) + coord_cartesian(xlim = c(-2.7, 1.2))



pdf(file="LobIn_metan_drugIndiv_forest.pdf",width=9,height=5)
LobIn_metan_drugIndiv_forest
dev.off()


########

## calculate sample size needed for average results
## mean comm_SD = LobIn_commSD_mean
## meta-analysis mean difference = LobIn_metan_class_main[["TE.random"]]
## calculate Cohen's d
LobIn_cohen_d = LobIn_metan_class_main[["TE.random"]] / LobIn_commSD_mean

LobIn_samplesize_av <- pwr.t.test(d = LobIn_cohen_d, power = 0.80, sig.level = 0.05)
## n = 16 - number in **each** group

## find number of studies with n > LobIn_samplesize_av

LobIn_data$total = LobIn_data$LobIn_Int_size + LobIn_data$LobIn_Pla_size

LobIn_pwrcount <- LobIn_data %>% group_by(total, Paper) %>% summarise(n = n())

LobIn_pwrcount_adequate = subset(LobIn_pwrcount, total >= 2*(LobIn_samplesize_av[["n"]]))
write.table(LobIn_pwrcount_adequate,file="LobIn_pwrcount_adequate.csv",sep=",")

########

## run meta-regressions on full LobIn dataset for continuous traits

LobIn_metan_full <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## create metan with >3 for each level of categorical variables

## Background

LobIn_bg_counts <- LobIn_data %>% group_by(Background_simple, Study) %>% summarise(n = n())
LobIn_bg_counts_sum <- LobIn_bg_counts %>% group_by(Background_simple) %>% summarise(n = n())

LobIn_bg_less3 = subset(LobIn_bg_counts_sum, n <3)
LobIn_bg_less3$Background_simple <- droplevels(LobIn_bg_less3$Background_simple)
LobIn_bg_droplist <- LobIn_bg_less3$Background_simple

LobIn_data_min3bg <- LobIn_data %>% filter(!Background_simple %in% LobIn_bg_droplist)

LobIn_metan_bg <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## Model 

LobIn_model_counts <- LobIn_data %>% group_by(Model_simple, Study) %>% summarise(n = n())
LobIn_model_counts_sum <- LobIn_model_counts %>% group_by(Model_simple) %>% summarise(n = n())

LobIn_model_less3 = subset(LobIn_model_counts_sum, n <3)
LobIn_model_less3$Model_simple <- droplevels(LobIn_model_less3$Model_simple)
LobIn_model_droplist <- LobIn_model_less3$Model_simple

LobIn_data_min3model <- LobIn_data %>% filter(!Model_simple %in% LobIn_model_droplist)

LobIn_metan_model <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## run metaregs

LobIn_reg_Qual_score <- metareg(LobIn_metan_full, Qual_score)
LobIn_reg_Qual_score_tab <- data.frame(LobIn_reg_Qual_score[["beta"]])
LobIn_reg_Qual_score_tab$se <- LobIn_reg_Qual_score[["se"]]
LobIn_reg_Qual_score_tab$pval <- LobIn_reg_Qual_score[["pval"]]
LobIn_reg_Qual_score_tab$beta <- LobIn_reg_Qual_score[["beta"]]
LobIn_reg_Qual_score_tab <- LobIn_reg_Qual_score_tab[-c(1),]
LobIn_reg_Qual_score_tab <- LobIn_reg_Qual_score_tab[-c(1)]
LobIn_reg_Qual_score_tab$k <- LobIn_reg_Qual_score[["k"]]
LobIn_reg_Qual_score_tab$r2 <- LobIn_reg_Qual_score[["R2"]]
LobIn_reg_Qual_score_tab$var <- "Qual_score"

LobIn_reg_Protocol <- metareg(LobIn_metan_full, Protocol)
LobIn_reg_Protocol_tab <- data.frame(LobIn_reg_Protocol[["beta"]])
LobIn_reg_Protocol_tab$se <- LobIn_reg_Protocol[["se"]]
LobIn_reg_Protocol_tab$pval <- LobIn_reg_Protocol[["pval"]]
LobIn_reg_Protocol_tab$beta <- LobIn_reg_Protocol[["beta"]]
LobIn_reg_Protocol_tab <- LobIn_reg_Protocol_tab[-c(1),]
LobIn_reg_Protocol_tab <- LobIn_reg_Protocol_tab[-c(1)]
LobIn_reg_Protocol_tab$k <- LobIn_reg_Protocol[["k"]]
LobIn_reg_Protocol_tab$r2 <- LobIn_reg_Protocol[["R2"]]
LobIn_reg_Protocol_tab$var <- "Protocol"

LobIn_reg_Randomisation <- metareg(LobIn_metan_full, Randomisation)
LobIn_reg_Randomisation_tab <- data.frame(LobIn_reg_Randomisation[["beta"]])
LobIn_reg_Randomisation_tab$se <- LobIn_reg_Randomisation[["se"]]
LobIn_reg_Randomisation_tab$pval <- LobIn_reg_Randomisation[["pval"]]
LobIn_reg_Randomisation_tab$beta <- LobIn_reg_Randomisation[["beta"]]
LobIn_reg_Randomisation_tab <- LobIn_reg_Randomisation_tab[-c(1),]
LobIn_reg_Randomisation_tab <- LobIn_reg_Randomisation_tab[-c(1)]
LobIn_reg_Randomisation_tab$k <- LobIn_reg_Randomisation[["k"]]
LobIn_reg_Randomisation_tab$r2 <- LobIn_reg_Randomisation[["R2"]]
LobIn_reg_Randomisation_tab$var <- "Randomisation"

LobIn_reg_Blinding <- metareg(LobIn_metan_full, Blinding)
LobIn_reg_Blinding_tab <- data.frame(LobIn_reg_Blinding[["beta"]])
LobIn_reg_Blinding_tab$se <- LobIn_reg_Blinding[["se"]]
LobIn_reg_Blinding_tab$pval <- LobIn_reg_Blinding[["pval"]]
LobIn_reg_Blinding_tab$beta <- LobIn_reg_Blinding[["beta"]]
LobIn_reg_Blinding_tab <- LobIn_reg_Blinding_tab[-c(1),]
LobIn_reg_Blinding_tab <- LobIn_reg_Blinding_tab[-c(1)]
LobIn_reg_Blinding_tab$k <- LobIn_reg_Blinding[["k"]]
LobIn_reg_Blinding_tab$r2 <- LobIn_reg_Blinding[["R2"]]
LobIn_reg_Blinding_tab$var <- "Blinding"

LobIn_reg_Power_calculation <- metareg(LobIn_metan_full, Power_calculation)
LobIn_reg_Power_calculation_tab <- data.frame(LobIn_reg_Power_calculation[["beta"]])
LobIn_reg_Power_calculation_tab$se <- LobIn_reg_Power_calculation[["se"]]
LobIn_reg_Power_calculation_tab$pval <- LobIn_reg_Power_calculation[["pval"]]
LobIn_reg_Power_calculation_tab$beta <- LobIn_reg_Power_calculation[["beta"]]
LobIn_reg_Power_calculation_tab <- LobIn_reg_Power_calculation_tab[-c(1),]
LobIn_reg_Power_calculation_tab <- LobIn_reg_Power_calculation_tab[-c(1)]
LobIn_reg_Power_calculation_tab$k <- LobIn_reg_Power_calculation[["k"]]
LobIn_reg_Power_calculation_tab$r2 <- LobIn_reg_Power_calculation[["R2"]]
LobIn_reg_Power_calculation_tab$var <- "Power_calculation"

LobIn_reg_Chol_per <- metareg(LobIn_metan_full, Chol_per)
LobIn_reg_Chol_per_tab <- data.frame(LobIn_reg_Chol_per[["beta"]])
LobIn_reg_Chol_per_tab$se <- LobIn_reg_Chol_per[["se"]]
LobIn_reg_Chol_per_tab$pval <- LobIn_reg_Chol_per[["pval"]]
LobIn_reg_Chol_per_tab$beta <- LobIn_reg_Chol_per[["beta"]]
LobIn_reg_Chol_per_tab <- LobIn_reg_Chol_per_tab[-c(1),]
LobIn_reg_Chol_per_tab <- LobIn_reg_Chol_per_tab[-c(1)]
LobIn_reg_Chol_per_tab$k <- LobIn_reg_Chol_per[["k"]]
LobIn_reg_Chol_per_tab$r2 <- LobIn_reg_Chol_per[["R2"]]
LobIn_reg_Chol_per_tab$var <- "Chol_per"

LobIn_reg_log_FructGluc_per <- metareg(LobIn_metan_full, log_FructGluc_per)
LobIn_reg_log_FructGluc_per_tab <- data.frame(LobIn_reg_log_FructGluc_per[["beta"]])
LobIn_reg_log_FructGluc_per_tab$se <- LobIn_reg_log_FructGluc_per[["se"]]
LobIn_reg_log_FructGluc_per_tab$pval <- LobIn_reg_log_FructGluc_per[["pval"]]
LobIn_reg_log_FructGluc_per_tab$beta <- LobIn_reg_log_FructGluc_per[["beta"]]
LobIn_reg_log_FructGluc_per_tab <- LobIn_reg_log_FructGluc_per_tab[-c(1),]
LobIn_reg_log_FructGluc_per_tab <- LobIn_reg_log_FructGluc_per_tab[-c(1)]
LobIn_reg_log_FructGluc_per_tab$k <- LobIn_reg_log_FructGluc_per[["k"]]
LobIn_reg_log_FructGluc_per_tab$r2 <- LobIn_reg_log_FructGluc_per[["R2"]]
LobIn_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per"

LobIn_reg_log_Sucr_kcal <- metareg(LobIn_metan_full, log_Sucr_kcal)
LobIn_reg_log_Sucr_kcal_tab <- data.frame(LobIn_reg_log_Sucr_kcal[["beta"]])
LobIn_reg_log_Sucr_kcal_tab$se <- LobIn_reg_log_Sucr_kcal[["se"]]
LobIn_reg_log_Sucr_kcal_tab$pval <- LobIn_reg_log_Sucr_kcal[["pval"]]
LobIn_reg_log_Sucr_kcal_tab$beta <- LobIn_reg_log_Sucr_kcal[["beta"]]
LobIn_reg_log_Sucr_kcal_tab <- LobIn_reg_log_Sucr_kcal_tab[-c(1),]
LobIn_reg_log_Sucr_kcal_tab <- LobIn_reg_log_Sucr_kcal_tab[-c(1)]
LobIn_reg_log_Sucr_kcal_tab$k <- LobIn_reg_log_Sucr_kcal[["k"]]
LobIn_reg_log_Sucr_kcal_tab$r2 <- LobIn_reg_log_Sucr_kcal[["R2"]]
LobIn_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal"

LobIn_reg_log_Fat_kcal <- metareg(LobIn_metan_full, log_Fat_kcal)
LobIn_reg_log_Fat_kcal_tab <- data.frame(LobIn_reg_log_Fat_kcal[["beta"]])
LobIn_reg_log_Fat_kcal_tab$se <- LobIn_reg_log_Fat_kcal[["se"]]
LobIn_reg_log_Fat_kcal_tab$pval <- LobIn_reg_log_Fat_kcal[["pval"]]
LobIn_reg_log_Fat_kcal_tab$beta <- LobIn_reg_log_Fat_kcal[["beta"]]
LobIn_reg_log_Fat_kcal_tab <- LobIn_reg_log_Fat_kcal_tab[-c(1),]
LobIn_reg_log_Fat_kcal_tab <- LobIn_reg_log_Fat_kcal_tab[-c(1)]
LobIn_reg_log_Fat_kcal_tab$k <- LobIn_reg_log_Fat_kcal[["k"]]
LobIn_reg_log_Fat_kcal_tab$r2 <- LobIn_reg_log_Fat_kcal[["R2"]]
LobIn_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal"

LobIn_reg_log_Age_start <- metareg(LobIn_metan_full, log_Age_start)
LobIn_reg_log_Age_start_tab <- data.frame(LobIn_reg_log_Age_start[["beta"]])
LobIn_reg_log_Age_start_tab$se <- LobIn_reg_log_Age_start[["se"]]
LobIn_reg_log_Age_start_tab$pval <- LobIn_reg_log_Age_start[["pval"]]
LobIn_reg_log_Age_start_tab$beta <- LobIn_reg_log_Age_start[["beta"]]
LobIn_reg_log_Age_start_tab <- LobIn_reg_log_Age_start_tab[-c(1),]
LobIn_reg_log_Age_start_tab <- LobIn_reg_log_Age_start_tab[-c(1)]
LobIn_reg_log_Age_start_tab$k <- LobIn_reg_log_Age_start[["k"]]
LobIn_reg_log_Age_start_tab$r2 <- LobIn_reg_log_Age_start[["R2"]]
LobIn_reg_log_Age_start_tab$var <- "log_Age_start"

LobIn_reg_log_Duration <- metareg(LobIn_metan_full, log_Duration)
LobIn_reg_log_Duration_tab <- data.frame(LobIn_reg_log_Duration[["beta"]])
LobIn_reg_log_Duration_tab$se <- LobIn_reg_log_Duration[["se"]]
LobIn_reg_log_Duration_tab$pval <- LobIn_reg_log_Duration[["pval"]]
LobIn_reg_log_Duration_tab$beta <- LobIn_reg_log_Duration[["beta"]]
LobIn_reg_log_Duration_tab <- LobIn_reg_log_Duration_tab[-c(1),]
LobIn_reg_log_Duration_tab <- LobIn_reg_log_Duration_tab[-c(1)]
LobIn_reg_log_Duration_tab$k <- LobIn_reg_log_Duration[["k"]]
LobIn_reg_log_Duration_tab$r2 <- LobIn_reg_log_Duration[["R2"]]
LobIn_reg_log_Duration_tab$var <- "log_Duration"

LobIn_reg_log_Age_end <- metareg(LobIn_metan_full, log_Age_end)
LobIn_reg_log_Age_end_tab <- data.frame(LobIn_reg_log_Age_end[["beta"]])
LobIn_reg_log_Age_end_tab$se <- LobIn_reg_log_Age_end[["se"]]
LobIn_reg_log_Age_end_tab$pval <- LobIn_reg_log_Age_end[["pval"]]
LobIn_reg_log_Age_end_tab$beta <- LobIn_reg_log_Age_end[["beta"]]
LobIn_reg_log_Age_end_tab <- LobIn_reg_log_Age_end_tab[-c(1),]
LobIn_reg_log_Age_end_tab <- LobIn_reg_log_Age_end_tab[-c(1)]
LobIn_reg_log_Age_end_tab$k <- LobIn_reg_log_Age_end[["k"]]
LobIn_reg_log_Age_end_tab$r2 <- LobIn_reg_log_Age_end[["R2"]]
LobIn_reg_log_Age_end_tab$var <- "log_Age_end"

LobIn_reg_log_Wt_change <- metareg(LobIn_metan_full, log_Wt_change)
LobIn_reg_log_Wt_change_tab <- data.frame(LobIn_reg_log_Wt_change[["beta"]])
LobIn_reg_log_Wt_change_tab$se <- LobIn_reg_log_Wt_change[["se"]]
LobIn_reg_log_Wt_change_tab$pval <- LobIn_reg_log_Wt_change[["pval"]]
LobIn_reg_log_Wt_change_tab$beta <- LobIn_reg_log_Wt_change[["beta"]]
LobIn_reg_log_Wt_change_tab <- LobIn_reg_log_Wt_change_tab[-c(1),]
LobIn_reg_log_Wt_change_tab <- LobIn_reg_log_Wt_change_tab[-c(1)]
LobIn_reg_log_Wt_change_tab$k <- LobIn_reg_log_Wt_change[["k"]]
LobIn_reg_log_Wt_change_tab$r2 <- LobIn_reg_log_Wt_change[["R2"]]
LobIn_reg_log_Wt_change_tab$var <- "log_Wt_change"

LobIn_reg_log_Gluc_change <- metareg(LobIn_metan_full, log_Gluc_change)
LobIn_reg_log_Gluc_change_tab <- data.frame(LobIn_reg_log_Gluc_change[["beta"]])
LobIn_reg_log_Gluc_change_tab$se <- LobIn_reg_log_Gluc_change[["se"]]
LobIn_reg_log_Gluc_change_tab$pval <- LobIn_reg_log_Gluc_change[["pval"]]
LobIn_reg_log_Gluc_change_tab$beta <- LobIn_reg_log_Gluc_change[["beta"]]
LobIn_reg_log_Gluc_change_tab <- LobIn_reg_log_Gluc_change_tab[-c(1),]
LobIn_reg_log_Gluc_change_tab <- LobIn_reg_log_Gluc_change_tab[-c(1)]
LobIn_reg_log_Gluc_change_tab$k <- LobIn_reg_log_Gluc_change[["k"]]
LobIn_reg_log_Gluc_change_tab$r2 <- LobIn_reg_log_Gluc_change[["R2"]]
LobIn_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

LobIn_reg_log_Insul_change <- metareg(LobIn_metan_full, log_Insul_change)
LobIn_reg_log_Insul_change_tab <- data.frame(LobIn_reg_log_Insul_change[["beta"]])
LobIn_reg_log_Insul_change_tab$se <- LobIn_reg_log_Insul_change[["se"]]
LobIn_reg_log_Insul_change_tab$pval <- LobIn_reg_log_Insul_change[["pval"]]
LobIn_reg_log_Insul_change_tab$beta <- LobIn_reg_log_Insul_change[["beta"]]
LobIn_reg_log_Insul_change_tab <- LobIn_reg_log_Insul_change_tab[-c(1),]
LobIn_reg_log_Insul_change_tab <- LobIn_reg_log_Insul_change_tab[-c(1)]
LobIn_reg_log_Insul_change_tab$k <- LobIn_reg_log_Insul_change[["k"]]
LobIn_reg_log_Insul_change_tab$r2 <- LobIn_reg_log_Insul_change[["R2"]]
LobIn_reg_log_Insul_change_tab$var <- "log_Insul_change"

LobIn_reg_Sex <- metareg(LobIn_metan_full, Sex)
LobIn_reg_Sex_tab <- data.frame(LobIn_reg_Sex[["beta"]])
LobIn_reg_Sex_tab$se <- LobIn_reg_Sex[["se"]]
LobIn_reg_Sex_tab$pval <- LobIn_reg_Sex[["pval"]]
LobIn_reg_Sex_tab$beta <- LobIn_reg_Sex[["beta"]]
LobIn_reg_Sex_tab <- LobIn_reg_Sex_tab[-c(1),]
LobIn_reg_Sex_tab <- LobIn_reg_Sex_tab[-c(1)]
LobIn_reg_Sex_tab$k <- LobIn_reg_Sex[["k"]]
LobIn_reg_Sex_tab$r2 <- NA
LobIn_reg_Sex_tab$var <- rownames(LobIn_reg_Sex_tab)
LobIn_reg_Sex_overall_tab <- data.frame(LobIn_reg_Sex[["QMp"]])
LobIn_reg_Sex_overall_tab$se <- NA
LobIn_reg_Sex_overall_tab$pval <- LobIn_reg_Sex[["QMp"]]
LobIn_reg_Sex_overall_tab$beta <- NA
LobIn_reg_Sex_overall_tab <- LobIn_reg_Sex_overall_tab[-c(1)]
LobIn_reg_Sex_overall_tab$k <- LobIn_reg_Sex[["k"]]
LobIn_reg_Sex_overall_tab$r2 <- LobIn_reg_Sex[["R2"]]
LobIn_reg_Sex_overall_tab$var <- "Sex_overall"
LobIn_reg_Sex_tab <- rbind(LobIn_reg_Sex_tab, LobIn_reg_Sex_overall_tab)

LobIn_reg_Drug_dose <- metareg(LobIn_metan_drugIndiv, Drug_dose)
LobIn_reg_Drug_dose_tab <- data.frame(LobIn_reg_Drug_dose[["beta"]])
LobIn_reg_Drug_dose_tab$se <- LobIn_reg_Drug_dose[["se"]]
LobIn_reg_Drug_dose_tab$pval <- LobIn_reg_Drug_dose[["pval"]]
LobIn_reg_Drug_dose_tab$beta <- LobIn_reg_Drug_dose[["beta"]]
LobIn_reg_Drug_dose_tab <- LobIn_reg_Drug_dose_tab[-c(1),]
LobIn_reg_Drug_dose_tab <- LobIn_reg_Drug_dose_tab[-c(1)]
LobIn_reg_Drug_dose_tab$k <- LobIn_reg_Drug_dose[["k"]]
LobIn_reg_Drug_dose_tab$r2 <- LobIn_reg_Drug_dose[["R2"]]
LobIn_reg_Drug_dose_tab$var <- "Drug_dose"

LobIn_reg_Indiv_drug_class_3 <- metareg(LobIn_metan_drugIndiv, Indiv_drug_class_3)
LobIn_reg_Indiv_drug_class_3_tab <- data.frame(LobIn_reg_Indiv_drug_class_3[["beta"]])
LobIn_reg_Indiv_drug_class_3_tab$se <- LobIn_reg_Indiv_drug_class_3[["se"]]
LobIn_reg_Indiv_drug_class_3_tab$pval <- LobIn_reg_Indiv_drug_class_3[["pval"]]
LobIn_reg_Indiv_drug_class_3_tab$beta <- LobIn_reg_Indiv_drug_class_3[["beta"]]
LobIn_reg_Indiv_drug_class_3_tab <- LobIn_reg_Indiv_drug_class_3_tab[-c(1),]
LobIn_reg_Indiv_drug_class_3_tab <- LobIn_reg_Indiv_drug_class_3_tab[-c(1)]
LobIn_reg_Indiv_drug_class_3_tab$k <- LobIn_reg_Indiv_drug_class_3[["k"]]
LobIn_reg_Indiv_drug_class_3_tab$r2 <- NA
LobIn_reg_Indiv_drug_class_3_tab$var <- rownames(LobIn_reg_Indiv_drug_class_3_tab)
LobIn_reg_Indiv_drug_class_3_overall_tab <- data.frame(LobIn_reg_Indiv_drug_class_3[["QMp"]])
LobIn_reg_Indiv_drug_class_3_overall_tab$se <- NA
LobIn_reg_Indiv_drug_class_3_overall_tab$pval <- LobIn_reg_Indiv_drug_class_3[["QMp"]]
LobIn_reg_Indiv_drug_class_3_overall_tab$beta <- NA
LobIn_reg_Indiv_drug_class_3_overall_tab <- LobIn_reg_Indiv_drug_class_3_overall_tab[-c(1)]
LobIn_reg_Indiv_drug_class_3_overall_tab$k <- LobIn_reg_Indiv_drug_class_3[["k"]]
LobIn_reg_Indiv_drug_class_3_overall_tab$r2 <- LobIn_reg_Indiv_drug_class_3[["R2"]]
LobIn_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall"
LobIn_reg_Indiv_drug_class_3_tab <- rbind(LobIn_reg_Indiv_drug_class_3_tab, LobIn_reg_Indiv_drug_class_3_overall_tab)

LobIn_reg_Model_simple <- metareg(LobIn_metan_model, Model_simple)
LobIn_reg_Model_simple_tab <- data.frame(LobIn_reg_Model_simple[["beta"]])
LobIn_reg_Model_simple_tab$se <- LobIn_reg_Model_simple[["se"]]
LobIn_reg_Model_simple_tab$pval <- LobIn_reg_Model_simple[["pval"]]
LobIn_reg_Model_simple_tab$beta <- LobIn_reg_Model_simple[["beta"]]
LobIn_reg_Model_simple_tab <- LobIn_reg_Model_simple_tab[-c(1),]
LobIn_reg_Model_simple_tab <- LobIn_reg_Model_simple_tab[-c(1)]
LobIn_reg_Model_simple_tab$k <- LobIn_reg_Model_simple[["k"]]
LobIn_reg_Model_simple_tab$r2 <- NA
LobIn_reg_Model_simple_tab$var <- rownames(LobIn_reg_Model_simple_tab)
LobIn_reg_Model_simple_overall_tab <- data.frame(LobIn_reg_Model_simple[["QMp"]])
LobIn_reg_Model_simple_overall_tab$se <- NA
LobIn_reg_Model_simple_overall_tab$pval <- LobIn_reg_Model_simple[["QMp"]]
LobIn_reg_Model_simple_overall_tab$beta <- NA
LobIn_reg_Model_simple_overall_tab <- LobIn_reg_Model_simple_overall_tab[-c(1)]
LobIn_reg_Model_simple_overall_tab$k <- LobIn_reg_Model_simple[["k"]]
LobIn_reg_Model_simple_overall_tab$r2 <- LobIn_reg_Model_simple[["R2"]]
LobIn_reg_Model_simple_overall_tab$var <- "Model_simple_overall"
LobIn_reg_Model_simple_tab <- rbind(LobIn_reg_Model_simple_tab, LobIn_reg_Model_simple_overall_tab)

LobIn_reg_Background_simple <- metareg(LobIn_metan_bg, Background_simple)
LobIn_reg_Background_simple_tab <- data.frame(LobIn_reg_Background_simple[["beta"]])
LobIn_reg_Background_simple_tab$se <- LobIn_reg_Background_simple[["se"]]
LobIn_reg_Background_simple_tab$pval <- LobIn_reg_Background_simple[["pval"]]
LobIn_reg_Background_simple_tab$beta <- LobIn_reg_Background_simple[["beta"]]
LobIn_reg_Background_simple_tab <- LobIn_reg_Background_simple_tab[-c(1),]
LobIn_reg_Background_simple_tab <- LobIn_reg_Background_simple_tab[-c(1)]
LobIn_reg_Background_simple_tab$k <- LobIn_reg_Background_simple[["k"]]
LobIn_reg_Background_simple_tab$r2 <- NA
LobIn_reg_Background_simple_tab$var <- rownames(LobIn_reg_Background_simple_tab)
LobIn_reg_Background_simple_overall_tab <- data.frame(LobIn_reg_Background_simple[["QMp"]])
LobIn_reg_Background_simple_overall_tab$se <- NA
LobIn_reg_Background_simple_overall_tab$pval <- LobIn_reg_Background_simple[["QMp"]]
LobIn_reg_Background_simple_overall_tab$beta <- NA
LobIn_reg_Background_simple_overall_tab <- LobIn_reg_Background_simple_overall_tab[-c(1)]
LobIn_reg_Background_simple_overall_tab$k <- LobIn_reg_Background_simple[["k"]]
LobIn_reg_Background_simple_overall_tab$r2 <- LobIn_reg_Background_simple[["R2"]]
LobIn_reg_Background_simple_overall_tab$var <- "Background_simple_overall"
LobIn_reg_Background_simple_tab <- rbind(LobIn_reg_Background_simple_tab, LobIn_reg_Background_simple_overall_tab)

LobIn_metareg_sumtab <- rbind(LobIn_reg_Qual_score_tab, LobIn_reg_Protocol_tab, LobIn_reg_Randomisation_tab, LobIn_reg_Blinding_tab, LobIn_reg_Power_calculation_tab, LobIn_reg_Chol_per_tab, LobIn_reg_log_FructGluc_per_tab, LobIn_reg_log_Sucr_kcal_tab, LobIn_reg_log_Fat_kcal_tab, LobIn_reg_log_Age_start_tab, LobIn_reg_log_Duration_tab, LobIn_reg_log_Age_end_tab, LobIn_reg_log_Wt_change_tab, LobIn_reg_log_Gluc_change_tab, LobIn_reg_log_Insul_change_tab, LobIn_reg_Sex_tab, LobIn_reg_Drug_dose_tab, LobIn_reg_Indiv_drug_class_3_tab, LobIn_reg_Model_simple_tab, LobIn_reg_Background_simple_tab)

LobIn_metareg_sumtab$text <- paste(format(round(LobIn_metareg_sumtab$beta, 1), nsmall = 1), format(round(LobIn_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
LobIn_metareg_sumtab$text <- paste(LobIn_metareg_sumtab$text, "", sep = ")", collapse = NULL)
LobIn_metareg_sumtab$pval_2dig <- paste((signif(LobIn_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
LobIn_metareg_sumtab$r2_2dig <- paste(format(round(LobIn_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(LobIn_metareg_sumtab,file="LobIn_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="LobIn_bubble_Wt_change.pdf",width=6,height=6)
LobIn_bubble_Wt_change <- bubble(LobIn_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in lobular inflammation grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
LobIn_bubble_Wt_change
dev.off()

pdf(file="LobIn_bubble_Fat_kcal.pdf",width=6,height=6)
LobIn_bubble_Fat_kcal <- bubble(LobIn_reg_log_Fat_kcal, xlab = "Log fat in diet (% kcal)", ylab = "Mean difference in lobular inflammation grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
LobIn_bubble_Fat_kcal
dev.off()

pdf(file="LobIn_bubble_Qual_score.pdf",width=6,height=6)
LobIn_bubble_Qual_score <- bubble(LobIn_reg_Qual_score, xlab = "Study quality score (0-4)", ylab = "Mean difference in lobular inflammation grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
LobIn_bubble_Qual_score
dev.off()


##########

##### run multiple meta-regression

## create data subset including >3 for each model >3 for background, and >3 for each drug

## start with dataset containing >3 for each background = LobIn_data_min3bg

LobIn_data_min3bg_modelcounts <- LobIn_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
LobIn_data_min3bg_modelcounts_sum <- LobIn_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

LobIn_data_min3bg_model_less3 = subset(LobIn_data_min3bg_modelcounts_sum, n <3)
LobIn_data_min3bg_model_less3$Model_simple <- droplevels(LobIn_data_min3bg_model_less3$Model_simple)
LobIn_data_min3bg_model_droplist <- LobIn_data_min3bg_model_less3$Model_simple

LobIn_multimetareg_data <- LobIn_data_min3bg %>% filter(!Model_simple %in% LobIn_data_min3bg_model_droplist)



## run multiple meta-regression

## create data subset including >3 for each model and >3 for background

## start with dataset containing >3 for each background = LobIn_data_min3bg

LobIn_data_min3bg_modelcounts <- LobIn_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
LobIn_data_min3bg_modelcounts_sum <- LobIn_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

LobIn_data_min3bg_model_less3 = subset(LobIn_data_min3bg_modelcounts_sum, n <3)
LobIn_data_min3bg_model_less3$Model_simple <- droplevels(LobIn_data_min3bg_model_less3$Model_simple)
LobIn_data_min3bg_model_droplist <- LobIn_data_min3bg_model_less3$Model_simple

LobIn_multimetareg_data <- LobIn_data_min3bg %>% filter(!Model_simple %in% LobIn_data_min3bg_model_droplist)

## Run metan

LobIn_multimetareg_metan <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")


library(metafor)

LobIn_multmetareg_tab <- data.frame(LobIn_multimetareg_metan$studlab)
LobIn_multmetareg_tab$yi <- LobIn_multimetareg_metan[["TE"]]
LobIn_multmetareg_tab$sei <- LobIn_multimetareg_metan[["seTE"]]
LobIn_multmetareg_tab$Model_simple <- LobIn_multimetareg_metan[["data"]][["Model_simple"]]
LobIn_multmetareg_tab$Background_simple <- LobIn_multimetareg_metan[["data"]][["Background_simple"]]
LobIn_multmetareg_tab$Sex <- LobIn_multimetareg_metan[["data"]][["Sex"]]
LobIn_multmetareg_tab$Indiv_drug_class_3 <- LobIn_multimetareg_metan[["data"]][["Indiv_drug_class_3"]]
LobIn_multmetareg_tab$log_Fat_kcal <- LobIn_multimetareg_metan[["data"]][["log_Fat_kcal"]]
LobIn_multmetareg_tab$log_Age_start <- LobIn_multimetareg_metan[["data"]][["log_Age_start"]]
LobIn_multmetareg_tab$log_Age_end <- LobIn_multimetareg_metan[["data"]][["log_Age_end"]]
LobIn_multmetareg_tab$log_Duration <- LobIn_multimetareg_metan[["data"]][["log_Duration"]]
LobIn_multmetareg_tab$log_Wt_change <- LobIn_multimetareg_metan[["data"]][["log_Wt_change"]]
LobIn_multmetareg_tab$log_Gluc_change <- LobIn_multimetareg_metan[["data"]][["log_Gluc_change"]]
LobIn_multmetareg_tab$log_Insul_change <- LobIn_multimetareg_metan[["data"]][["log_Insul_change"]]
LobIn_multmetareg_tab$Qual_score <- LobIn_multimetareg_metan[["data"]][["Qual_score"]]

LobIn_multmetareg_tab_cor <- cor(LobIn_multmetareg_tab[,8:15], use="complete.obs")
LobIn_multmetareg_tab_cor

library(PerformanceAnalytics)
chart.Correlation(LobIn_multmetareg_tab[,8:15], use="complete.obs")

## high correlation between age_start and age_end therefore drop age_end from model

## also have to drop insulin change due to insufficient data

library(dmetar)

LobIn_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = LobIn_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE)
LobIn_multi_intereference1

sink("LobIn_multi_intereference1.txt")
print(LobIn_multi_intereference1)
sink()

## run multi-metareg for top model 1

LobIn_multmetareg_1 <- rma(yi = yi, sei = sei, data = LobIn_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + log_Gluc_change, test="knha")

LobIn_multmetareg_1_tab <- coef(summary(LobIn_multmetareg_1))
LobIn_multmetareg_1_tab$rownames <- rownames(LobIn_multmetareg_1_tab)

LobIn_multmetareg_1_tab$mod1_text <- paste(format(round(LobIn_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(LobIn_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
LobIn_multmetareg_1_tab$mod1_text <- paste(LobIn_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL)
LobIn_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(LobIn_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL)

## check robustness using permutation test

LobIn_multmetareg_1_permut <- permutest(LobIn_multmetareg_1)

sink("LobIn_multmetareg_1_permut.txt")
print(LobIn_multmetareg_1_permut)
sink()


## insufficient data to repeat multiple meta-reg using individual drugs in addition to other variables

LobIn_multmetareg_sumtab <- LobIn_multmetareg_1_tab
write.table(LobIn_multmetareg_sumtab, "LobIn_multmetareg_sumtab.csv", sep=",")


## See if meta-regression results change after removal of weight-loss diets

library(tidyverse)

LobIn_NoWtLoss_data <- LobIn_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD')


LobIn_NoWtLoss_metan_full <- metacont(LobIn_Int_size, LobIn_Int_Mean, LobIn_Int_SD, LobIn_Pla_size, LobIn_Pla_Mean, LobIn_Pla_SD, data = LobIn_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

LobIn_NoWtLoss_reg_log_Wt_change <- metareg(LobIn_NoWtLoss_metan_full, log_Wt_change)
LobIn_NoWtLoss_reg_log_Wt_change_tab <- data.frame(LobIn_NoWtLoss_reg_log_Wt_change[["beta"]])
LobIn_NoWtLoss_reg_log_Wt_change_tab$se <- LobIn_NoWtLoss_reg_log_Wt_change[["se"]]
LobIn_NoWtLoss_reg_log_Wt_change_tab$pval <- LobIn_NoWtLoss_reg_log_Wt_change[["pval"]]
LobIn_NoWtLoss_reg_log_Wt_change_tab$beta <- LobIn_NoWtLoss_reg_log_Wt_change[["beta"]]
LobIn_NoWtLoss_reg_log_Wt_change_tab <- LobIn_NoWtLoss_reg_log_Wt_change_tab[-c(1),]
LobIn_NoWtLoss_reg_log_Wt_change_tab <- LobIn_NoWtLoss_reg_log_Wt_change_tab[-c(1)]
LobIn_NoWtLoss_reg_log_Wt_change_tab$k <- LobIn_NoWtLoss_reg_log_Wt_change[["k"]]
LobIn_NoWtLoss_reg_log_Wt_change_tab$r2 <- LobIn_NoWtLoss_reg_log_Wt_change[["R2"]]
LobIn_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change"

LobIn_NoWtLoss_reg_log_Gluc_change <- metareg(LobIn_NoWtLoss_metan_full, log_Gluc_change)
LobIn_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(LobIn_NoWtLoss_reg_log_Gluc_change[["beta"]])
LobIn_NoWtLoss_reg_log_Gluc_change_tab$se <- LobIn_NoWtLoss_reg_log_Gluc_change[["se"]]
LobIn_NoWtLoss_reg_log_Gluc_change_tab$pval <- LobIn_NoWtLoss_reg_log_Gluc_change[["pval"]]
LobIn_NoWtLoss_reg_log_Gluc_change_tab$beta <- LobIn_NoWtLoss_reg_log_Gluc_change[["beta"]]
LobIn_NoWtLoss_reg_log_Gluc_change_tab <- LobIn_NoWtLoss_reg_log_Gluc_change_tab[-c(1),]
LobIn_NoWtLoss_reg_log_Gluc_change_tab <- LobIn_NoWtLoss_reg_log_Gluc_change_tab[-c(1)]
LobIn_NoWtLoss_reg_log_Gluc_change_tab$k <- LobIn_NoWtLoss_reg_log_Gluc_change[["k"]]
LobIn_NoWtLoss_reg_log_Gluc_change_tab$r2 <- LobIn_NoWtLoss_reg_log_Gluc_change[["R2"]]
LobIn_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

LobIn_NoWtLoss_reg_log_Insul_change <- metareg(LobIn_NoWtLoss_metan_full, log_Insul_change)
LobIn_NoWtLoss_reg_log_Insul_change_tab <- data.frame(LobIn_NoWtLoss_reg_log_Insul_change[["beta"]])
LobIn_NoWtLoss_reg_log_Insul_change_tab$se <- LobIn_NoWtLoss_reg_log_Insul_change[["se"]]
LobIn_NoWtLoss_reg_log_Insul_change_tab$pval <- LobIn_NoWtLoss_reg_log_Insul_change[["pval"]]
LobIn_NoWtLoss_reg_log_Insul_change_tab$beta <- LobIn_NoWtLoss_reg_log_Insul_change[["beta"]]
LobIn_NoWtLoss_reg_log_Insul_change_tab <- LobIn_NoWtLoss_reg_log_Insul_change_tab[-c(1),]
LobIn_NoWtLoss_reg_log_Insul_change_tab <- LobIn_NoWtLoss_reg_log_Insul_change_tab[-c(1)]
LobIn_NoWtLoss_reg_log_Insul_change_tab$k <- LobIn_NoWtLoss_reg_log_Insul_change[["k"]]
LobIn_NoWtLoss_reg_log_Insul_change_tab$r2 <- LobIn_NoWtLoss_reg_log_Insul_change[["R2"]]
LobIn_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change"

LobIn_NoWtLoss_metareg_sumtab <- rbind(LobIn_NoWtLoss_reg_log_Wt_change_tab, LobIn_NoWtLoss_reg_log_Gluc_change_tab, LobIn_NoWtLoss_reg_log_Insul_change_tab)

LobIn_NoWtLoss_metareg_sumtab$text <- paste(format(round(LobIn_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(LobIn_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
LobIn_NoWtLoss_metareg_sumtab$text <- paste(LobIn_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL)
LobIn_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(LobIn_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
LobIn_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(LobIn_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(LobIn_NoWtLoss_metareg_sumtab,file="LobIn_NoWtLoss_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="LobIn_NoWtLoss_bubble_weight_change.pdf",width=6,height=6)
LobIn_NoWtLoss_bubble_weight_change <- bubble(LobIn_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in lobular inflammation grade", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
LobIn_NoWtLoss_bubble_weight_change
dev.off()


## following on from LobIn analysis

setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/Bal_out")


########

## Analysis for histological lobular inflammation grade (Bal)

########


## Power analysis
library(pwr)

## calculate common SD
full_data$Bal_Int_SD2 <- full_data$Bal_Int_SD*full_data$Bal_Int_SD
full_data$Bal_Pla_SD2 <- full_data$Bal_Pla_SD*full_data$Bal_Pla_SD
full_data$Bal_comm_SD <- sqrt(((full_data$Bal_Int_SD2+full_data$Bal_Pla_SD2)/2))
full_data$Bal_m_diff <- full_data$Bal_Pla_Mean-full_data$Bal_Int_Mean
full_data$Bal_eff_size <- full_data$Bal_m_diff/full_data$Bal_comm_SD

library(tidyr)

Bal_data <- full_data
Bal_data <- Bal_data %>% drop_na(Bal_eff_size)

Bal_data$power <- pwr.t2n.test(n1 = Bal_data$Bal_Int_size, n2 = Bal_data$Bal_Pla_size, d = Bal_data$Bal_eff_size)$power

write.table(Bal_data$power,file="Bal_data_power.csv",sep=",")

hist(Bal_data$power)

Bal_dens_power <- density(Bal_data$power)

pdf(file="Bal_kernel_power_v1.pdf")
plot(Bal_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)")
polygon(Bal_dens_power, col="red", border="blue")
dev.off()


## load packages for metan
library(dmetar)
library(meta)
library(metafor)
library(readxl)
max.print = 100000

## drop where <3 unique studies for any drug class
Bal_drugsclass_counts <- Bal_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
Bal_class_counts <- Bal_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

Bal_class_less3 = subset(Bal_class_counts, n <3)
str(Bal_class_less3)
Bal_class_less3$Drug_Class_new_1_all <- droplevels(Bal_class_less3$Drug_Class_new_1_all)
Bal_class_droplist <- Bal_class_less3$Drug_Class_new_1_all

Bal_data_min3class <- Bal_data %>% filter(!Drug_Class_new_1_all %in% Bal_class_droplist)


## run metan
Bal_metan_class_main <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Bal_metan_class <- update(Bal_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
Bal_metan_class_tab <- data.frame(Bal_metan_class[["TE.random.w"]])
Bal_metan_class_tab$drug <- Bal_metan_class[["bylevs"]]
Bal_metan_class_tab$SE <- Bal_metan_class[["seTE.random.w"]]
Bal_metan_class_tab$lower <- Bal_metan_class[["lower.random.w"]]
Bal_metan_class_tab$upper <- Bal_metan_class[["upper.random.w"]]
Bal_metan_class_tab$Pz <- Bal_metan_class[["pval.random.w"]]
Bal_metan_class_tab$weight <- Bal_metan_class[["w.random.w"]]
Bal_metan_class_tab$k <- Bal_metan_class[["k.w"]]
Bal_metan_class_tab$controls <- Bal_metan_class[["n.c.w"]]
Bal_metan_class_tab$experimental <- Bal_metan_class[["n.e.w"]]
Bal_metan_class_tab$Q <- Bal_metan_class[["Q.w"]]
Bal_metan_class_tab$Pq <- Bal_metan_class[["pval.Q.w"]]
Bal_metan_class_tab$tau <- Bal_metan_class[["tau.w"]]
Bal_metan_class_tab$I2 <- Bal_metan_class[["I2.w"]]
Bal_metan_class_tab <- Bal_metan_class_tab %>% rename(MD = Bal_metan_class...TE.random.w...)
Bal_metan_class_tab <- Bal_metan_class_tab[order(-Bal_metan_class_tab$MD),]
Bal_metan_class_tab$row_number <- 1:nrow(Bal_metan_class_tab) 
Bal_metan_class_tab$subgroup <- "Subgroup"
Bal_class_counts <- Bal_class_counts %>% rename(drug = Drug_Class_new_1_all)
Bal_metan_class_tab <- merge(Bal_class_counts, Bal_metan_class_tab, by="drug")

Bal_metan_class_tab_overall <- data.frame(Bal_metan_class[["TE.random"]])
Bal_metan_class_tab_overall$drug <- "Overall"
Bal_metan_class_tab_overall$SE <- Bal_metan_class[["seTE.random"]]
Bal_metan_class_tab_overall$lower <- Bal_metan_class[["lower.random"]]
Bal_metan_class_tab_overall$upper <- Bal_metan_class[["upper.random"]]
Bal_metan_class_tab_overall$Pz <- Bal_metan_class[["pval.random"]]
Bal_metan_class_tab_overall$weight <- (max(Bal_metan_class_tab$weight)*2)
Bal_metan_class_tab_overall$k <- Bal_metan_class[["k"]]
Bal_metan_class_tab_overall$controls <- sum(Bal_metan_class_tab$controls)
Bal_metan_class_tab_overall$experimental <- sum(Bal_metan_class_tab$experimental)
Bal_metan_class_tab_overall$Q <- Bal_metan_class[["Q"]]
Bal_metan_class_tab_overall$Pq <- Bal_metan_class[["pval.Q"]]
Bal_metan_class_tab_overall$tau <- Bal_metan_class[["tau"]]
Bal_metan_class_tab_overall$I2 <- Bal_metan_class[["I2"]]
Bal_metan_class_tab_overall <- Bal_metan_class_tab_overall %>% rename(MD = Bal_metan_class...TE.random...)
Bal_metan_class_tab_overall$row_number <- ((nrow(Bal_metan_class_tab))+1)
Bal_metan_class_tab_overall$subgroup <- "Overall"
Bal_metan_class_tab_overall$n <- sum(Bal_metan_class_tab$n)
Bal_metan_class_sumtab <- rbind(Bal_metan_class_tab, Bal_metan_class_tab_overall)
Bal_metan_class_sumtab$weight <- as.numeric(Bal_metan_class_sumtab$weight)
Bal_metan_class_sumtab$row_number <- as.numeric(Bal_metan_class_sumtab$row_number)
Bal_metan_class_sumtab$subgroup <- as.factor(Bal_metan_class_sumtab$subgroup)
Bal_metan_class_sumtab$total = Bal_metan_class_sumtab$controls + Bal_metan_class_sumtab$experimental

Bal_metan_class_sumtab$text <- paste(format(round(Bal_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Bal_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Bal_metan_class_sumtab$text <- paste(Bal_metan_class_sumtab$text, format(round(Bal_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Bal_metan_class_sumtab$text <- paste(Bal_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

Bal_metan_class_sumtab$SE_1dig <- paste(format(round(Bal_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Bal_metan_class_sumtab$Pz_1dig <- paste((signif(Bal_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Bal_metan_class_sumtab$tI2_2dig <- paste(format(round(Bal_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Bal_metan_class_sumtab$tau_1dig <- paste(format(round(Bal_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Bal_metan_class_sumtab$Pq_1dig <- paste((signif(Bal_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Bal_metan_class_sumtab,file="Bal_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(Bal_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Bal_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Bal_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = Bal_metan_class_tab_overall$lower
overall_max = Bal_metan_class_tab_overall$upper

Bal_metan_class_ybreaks <- nrow(Bal_metan_class_sumtab)
Bal_metan_class_sumtab <- Bal_metan_class_sumtab[order(Bal_metan_class_sumtab$row_number),]

Bal_metan_class_forest <- ggplot(data= Bal_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Bal_metan_class_ybreaks, labels = Bal_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-2.6, 1), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_text(data=Bal_metan_class_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=Bal_metan_class_sumtab, aes(x=-2.2, label=k), size = 3.5, hjust=0) + geom_text(data=Bal_metan_class_sumtab, aes(x=-1.95, label=total), size = 3.5, hjust=0)

pdf(file="Bal_metan_class_forest.pdf",width=10,height=4)
Bal_metan_class_forest
dev.off()


#####################

#######

## bias analysis

Bal_class_eggers <- eggers.test(x = Bal_metan_class_main)
Bal_class_eggers
sink("Bal_class_eggers.txt")
print(Bal_class_eggers)
sink()

Bal_class_trimfill <- trimfill(Bal_metan_class_main)
Bal_class_trimfill
sink("Bal_class_trimfill.txt")
print(Bal_class_trimfill)
sink()

pdf(file="Bal_class_funnel.pdf")
funnel(Bal_class_trimfill, xlab="Mean difference in hepatic Bal (%)", xlim=c(-4,4), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-3.5, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue"))
dev.off()

## use Baujat plot to look for outliers

pdf(file="Bal_class_baujat.pdf")
Bal_class_baujat <- baujat(Bal_metan_class_main)
Bal_class_baujat
dev.off()

## look for outliers based on SD

Bal_commSD_mean <- mean(Bal_data$Bal_comm_SD, na.rm=TRUE)
Bal_commSD_SD <- sd(Bal_data$Bal_comm_SD, na.rm=TRUE)

Bal_commSD_norm <- dnorm(Bal_data$Bal_comm_SD, mean = Bal_commSD_mean, sd = Bal_commSD_SD, log = FALSE)
Bal_commSD_norm <- as.data.frame(Bal_commSD_norm)
Bal_commSD_norm$Bal_comm_SD <- Bal_data$Bal_comm_SD
Bal_commSD_norm$Paper <- Bal_data$Paper

pdf(file = "Bal_commSD_norm.pdf")
plot(Bal_commSD_norm$Bal_comm_SD, Bal_commSD_norm$Bal_commSD_norm)
dev.off()

## exclude studies with Bal_comm_SD >1 or high contribution to heterogeneity on baujat plot

Bal_NoOutlier_data = subset(Bal_data, Bal_comm_SD <1)
Bal_NoOutlier_data <- Bal_NoOutlier_data %>% filter(Paper != "Fan 2017" & Paper != "Chong 2015_1" & Paper != "Ideta 2015" & Paper != "Ishii 2009" & Paper != "Magdy 2017_1"  & Paper != "Pais 2014_1" )


#######


## re-rerun after outliers excluded


## drop where <3 unique studies for any drug class
Bal_NoOutlier_drugsclass_counts <- Bal_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
Bal_NoOutlier_class_counts <- Bal_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

Bal_NoOutlier_class_less3 = subset(Bal_NoOutlier_class_counts, n <3)
str(Bal_NoOutlier_class_less3)
Bal_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(Bal_NoOutlier_class_less3$Drug_Class_new_1_all)
Bal_NoOutlier_class_droplist <- Bal_NoOutlier_class_less3$Drug_Class_new_1_all

Bal_NoOutlier_data_min3class <- Bal_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% Bal_NoOutlier_class_droplist)


## run metan
Bal_NoOutlier_metan_class_main <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Bal_NoOutlier_metan_class <- update(Bal_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
Bal_NoOutlier_metan_class_tab <- data.frame(Bal_NoOutlier_metan_class[["TE.random.w"]])
Bal_NoOutlier_metan_class_tab$drug <- Bal_NoOutlier_metan_class[["bylevs"]]
Bal_NoOutlier_metan_class_tab$SE <- Bal_NoOutlier_metan_class[["seTE.random.w"]]
Bal_NoOutlier_metan_class_tab$lower <- Bal_NoOutlier_metan_class[["lower.random.w"]]
Bal_NoOutlier_metan_class_tab$upper <- Bal_NoOutlier_metan_class[["upper.random.w"]]
Bal_NoOutlier_metan_class_tab$Pz <- Bal_NoOutlier_metan_class[["pval.random.w"]]
Bal_NoOutlier_metan_class_tab$weight <- Bal_NoOutlier_metan_class[["w.random.w"]]
Bal_NoOutlier_metan_class_tab$k <- Bal_NoOutlier_metan_class[["k.w"]]
Bal_NoOutlier_metan_class_tab$controls <- Bal_NoOutlier_metan_class[["n.c.w"]]
Bal_NoOutlier_metan_class_tab$experimental <- Bal_NoOutlier_metan_class[["n.e.w"]]
Bal_NoOutlier_metan_class_tab$Q <- Bal_NoOutlier_metan_class[["Q.w"]]
Bal_NoOutlier_metan_class_tab$Pq <- Bal_NoOutlier_metan_class[["pval.Q.w"]]
Bal_NoOutlier_metan_class_tab$tau <- Bal_NoOutlier_metan_class[["tau.w"]]
Bal_NoOutlier_metan_class_tab$I2 <- Bal_NoOutlier_metan_class[["I2.w"]]
Bal_NoOutlier_metan_class_tab <- Bal_NoOutlier_metan_class_tab %>% rename(MD = Bal_NoOutlier_metan_class...TE.random.w...)
Bal_NoOutlier_metan_class_tab <- Bal_NoOutlier_metan_class_tab[order(-Bal_NoOutlier_metan_class_tab$MD),]
Bal_NoOutlier_metan_class_tab <- Bal_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n())
Bal_NoOutlier_metan_class_tab$subgroup <- "Subgroup"
Bal_NoOutlier_class_counts <- Bal_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all)
Bal_NoOutlier_metan_class_tab <- merge(Bal_NoOutlier_class_counts, Bal_NoOutlier_metan_class_tab, by="drug")

Bal_NoOutlier_metan_class_tab_overall <- data.frame(Bal_NoOutlier_metan_class[["TE.random"]])
Bal_NoOutlier_metan_class_tab_overall$drug <- "Overall"
Bal_NoOutlier_metan_class_tab_overall$SE <- Bal_NoOutlier_metan_class[["seTE.random"]]
Bal_NoOutlier_metan_class_tab_overall$lower <- Bal_NoOutlier_metan_class[["lower.random"]]
Bal_NoOutlier_metan_class_tab_overall$upper <- Bal_NoOutlier_metan_class[["upper.random"]]
Bal_NoOutlier_metan_class_tab_overall$Pz <- Bal_NoOutlier_metan_class[["pval.random"]]
Bal_NoOutlier_metan_class_tab_overall$weight <- (max(Bal_NoOutlier_metan_class_tab$weight)*2)
Bal_NoOutlier_metan_class_tab_overall$k <- Bal_NoOutlier_metan_class[["k"]]
Bal_NoOutlier_metan_class_tab_overall$controls <- sum(Bal_NoOutlier_metan_class_tab$controls)
Bal_NoOutlier_metan_class_tab_overall$experimental <- sum(Bal_NoOutlier_metan_class_tab$experimental)
Bal_NoOutlier_metan_class_tab_overall$Q <- Bal_NoOutlier_metan_class[["Q"]]
Bal_NoOutlier_metan_class_tab_overall$Pq <- Bal_NoOutlier_metan_class[["pval.Q"]]
Bal_NoOutlier_metan_class_tab_overall$tau <- Bal_NoOutlier_metan_class[["tau"]]
Bal_NoOutlier_metan_class_tab_overall$I2 <- Bal_NoOutlier_metan_class[["I2"]]
Bal_NoOutlier_metan_class_tab_overall <- Bal_NoOutlier_metan_class_tab_overall %>% rename(MD = Bal_NoOutlier_metan_class...TE.random...)
Bal_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(Bal_NoOutlier_metan_class_tab))+1)
Bal_NoOutlier_metan_class_tab_overall$subgroup <- "Overall"
Bal_NoOutlier_metan_class_tab_overall$n <- sum(Bal_NoOutlier_metan_class_tab$n)
Bal_NoOutlier_metan_class_sumtab <- rbind(Bal_NoOutlier_metan_class_tab, Bal_NoOutlier_metan_class_tab_overall)
Bal_NoOutlier_metan_class_sumtab$weight <- as.numeric(Bal_NoOutlier_metan_class_sumtab$weight)
Bal_NoOutlier_metan_class_sumtab$row_number <- as.numeric(Bal_NoOutlier_metan_class_sumtab$row_number)
Bal_NoOutlier_metan_class_sumtab$subgroup <- as.factor(Bal_NoOutlier_metan_class_sumtab$subgroup)
Bal_NoOutlier_metan_class_sumtab$total = Bal_NoOutlier_metan_class_sumtab$controls + Bal_NoOutlier_metan_class_sumtab$experimental

Bal_NoOutlier_metan_class_sumtab$text <- paste(format(round(Bal_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Bal_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Bal_NoOutlier_metan_class_sumtab$text <- paste(Bal_NoOutlier_metan_class_sumtab$text, format(round(Bal_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Bal_NoOutlier_metan_class_sumtab$text <- paste(Bal_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

Bal_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(Bal_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Bal_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(Bal_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Bal_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(Bal_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Bal_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(Bal_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Bal_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(Bal_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Bal_NoOutlier_metan_class_sumtab,file="Bal_NoOutlier_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(Bal_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Bal_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Bal_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = Bal_NoOutlier_metan_class_tab_overall$lower
overall_max = Bal_NoOutlier_metan_class_tab_overall$upper

Bal_NoOutlier_metan_class_ybreaks <- nrow(Bal_NoOutlier_metan_class_sumtab)
Bal_NoOutlier_metan_class_sumtab <- Bal_NoOutlier_metan_class_sumtab[order(Bal_NoOutlier_metan_class_sumtab$row_number),]

Bal_NoOutlier_metan_class_forest <- ggplot(data= Bal_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Bal_NoOutlier_metan_class_ybreaks, labels = Bal_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-2.6, 1), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_text(data=Bal_NoOutlier_metan_class_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=Bal_NoOutlier_metan_class_sumtab, aes(x=-2.2, label=k), size = 3.5, hjust=0) + geom_text(data=Bal_NoOutlier_metan_class_sumtab, aes(x=-1.95, label=total), size = 3.5, hjust=0)

pdf(file="Bal_NoOutlier_metan_class_forest.pdf",width=10,height=5)
Bal_NoOutlier_metan_class_forest
dev.off()

#######

## re-run using sub-grouping by individual drugs



## drop where <3 unique studies for any drug class
Bal_drugIndiv_counts <- Bal_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n())
Bal_drugIndiv_sum_counts <- Bal_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n())

Bal_drugIndiv_less3 = subset(Bal_drugIndiv_sum_counts, n <3)
str(Bal_drugIndiv_less3)
Bal_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(Bal_drugIndiv_less3$Indiv_drug_class_3)
Bal_drugIndiv_droplist <- Bal_drugIndiv_less3$Indiv_drug_class_3

Bal_data_min3drug <- Bal_data %>% filter(!Indiv_drug_class_3 %in% Bal_drugIndiv_droplist)


## run metan
Bal_metan_drugIndiv <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Bal_metan_drugIndiv <- update(Bal_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug")

## make summary table of results
Bal_metan_drugIndiv_tab <- data.frame(Bal_metan_drugIndiv[["TE.random.w"]])
Bal_metan_drugIndiv_tab$drug <- Bal_metan_drugIndiv[["bylevs"]]
Bal_metan_drugIndiv_tab$SE <- Bal_metan_drugIndiv[["seTE.random.w"]]
Bal_metan_drugIndiv_tab$lower <- Bal_metan_drugIndiv[["lower.random.w"]]
Bal_metan_drugIndiv_tab$upper <- Bal_metan_drugIndiv[["upper.random.w"]]
Bal_metan_drugIndiv_tab$Pz <- Bal_metan_drugIndiv[["pval.random.w"]]
Bal_metan_drugIndiv_tab$weight <- Bal_metan_drugIndiv[["w.random.w"]]
Bal_metan_drugIndiv_tab$k <- Bal_metan_drugIndiv[["k.w"]]
Bal_metan_drugIndiv_tab$controls <- Bal_metan_drugIndiv[["n.c.w"]]
Bal_metan_drugIndiv_tab$experimental <- Bal_metan_drugIndiv[["n.e.w"]]
Bal_metan_drugIndiv_tab$Q <- Bal_metan_drugIndiv[["Q.w"]]
Bal_metan_drugIndiv_tab$Pq <- Bal_metan_drugIndiv[["pval.Q.w"]]
Bal_metan_drugIndiv_tab$tau <- Bal_metan_drugIndiv[["tau.w"]]
Bal_metan_drugIndiv_tab$I2 <- Bal_metan_drugIndiv[["I2.w"]]
Bal_metan_drugIndiv_tab <- Bal_metan_drugIndiv_tab %>% rename(MD = Bal_metan_drugIndiv...TE.random.w...)
Bal_metan_drugIndiv_tab <- Bal_metan_drugIndiv_tab[order(-Bal_metan_drugIndiv_tab$MD),]
Bal_metan_drugIndiv_tab <- Bal_metan_drugIndiv_tab %>% mutate(row_number= 1:n())
Bal_metan_drugIndiv_tab$subgroup <- "Subgroup"
Bal_drugIndiv_sum_counts <- Bal_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3)
Bal_metan_drugIndiv_tab <- merge(Bal_drugIndiv_sum_counts, Bal_metan_drugIndiv_tab, by="drug")

Bal_metan_drugIndiv_tab_overall <- data.frame(Bal_metan_drugIndiv[["TE.random"]])
Bal_metan_drugIndiv_tab_overall$drug <- "Overall"
Bal_metan_drugIndiv_tab_overall$SE <- Bal_metan_drugIndiv[["seTE.random"]]
Bal_metan_drugIndiv_tab_overall$lower <- Bal_metan_drugIndiv[["lower.random"]]
Bal_metan_drugIndiv_tab_overall$upper <- Bal_metan_drugIndiv[["upper.random"]]
Bal_metan_drugIndiv_tab_overall$Pz <- Bal_metan_drugIndiv[["pval.random"]]
Bal_metan_drugIndiv_tab_overall$weight <- (max(Bal_metan_drugIndiv_tab$weight)*2)
Bal_metan_drugIndiv_tab_overall$k <- Bal_metan_drugIndiv[["k"]]
Bal_metan_drugIndiv_tab_overall$controls <- sum(Bal_metan_drugIndiv_tab$controls)
Bal_metan_drugIndiv_tab_overall$experimental <- sum(Bal_metan_drugIndiv_tab$experimental)
Bal_metan_drugIndiv_tab_overall$Q <- Bal_metan_drugIndiv[["Q"]]
Bal_metan_drugIndiv_tab_overall$Pq <- Bal_metan_drugIndiv[["pval.Q"]]
Bal_metan_drugIndiv_tab_overall$tau <- Bal_metan_drugIndiv[["tau"]]
Bal_metan_drugIndiv_tab_overall$I2 <- Bal_metan_drugIndiv[["I2"]]
Bal_metan_drugIndiv_tab_overall <- Bal_metan_drugIndiv_tab_overall %>% rename(MD = Bal_metan_drugIndiv...TE.random...)
Bal_metan_drugIndiv_tab_overall$row_number <- ((nrow(Bal_metan_drugIndiv_tab))+1)
Bal_metan_drugIndiv_tab_overall$subgroup <- "Overall"
Bal_metan_drugIndiv_tab_overall$n <- sum(Bal_metan_drugIndiv_tab$n)
Bal_metan_drugIndiv_sumtab <- rbind(Bal_metan_drugIndiv_tab, Bal_metan_drugIndiv_tab_overall)
Bal_metan_drugIndiv_sumtab$weight <- as.numeric(Bal_metan_drugIndiv_sumtab$weight)
Bal_metan_drugIndiv_sumtab$row_number <- as.numeric(Bal_metan_drugIndiv_sumtab$row_number)
Bal_metan_drugIndiv_sumtab$subgroup <- as.factor(Bal_metan_drugIndiv_sumtab$subgroup)
Bal_metan_drugIndiv_sumtab$total = Bal_metan_drugIndiv_sumtab$controls + Bal_metan_drugIndiv_sumtab$experimental

Bal_metan_drugIndiv_sumtab$text <- paste(format(round(Bal_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(Bal_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Bal_metan_drugIndiv_sumtab$text <- paste(Bal_metan_drugIndiv_sumtab$text, format(round(Bal_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Bal_metan_drugIndiv_sumtab$text <- paste(Bal_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL)

Bal_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(Bal_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Bal_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(Bal_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Bal_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(Bal_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Bal_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(Bal_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Bal_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(Bal_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Bal_metan_drugIndiv_sumtab,file="Bal_metan_drugIndiv_sumtab.csv",sep=",")

## make forest plot

label_bold <- ifelse(Bal_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Bal_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Bal_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10")

overall_min = Bal_metan_drugIndiv_tab_overall$lower
overall_max = Bal_metan_drugIndiv_tab_overall$upper

Bal_metan_drugIndiv_ybreaks <- nrow(Bal_metan_drugIndiv_sumtab)
Bal_metan_drugIndiv_sumtab <- Bal_metan_drugIndiv_sumtab[order(Bal_metan_drugIndiv_sumtab$row_number),]

Bal_metan_drugIndiv_forest <- ggplot(data= Bal_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Bal_metan_drugIndiv_ybreaks, labels = Bal_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.43, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-2, 1), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_text(data=Bal_metan_drugIndiv_sumtab, aes(x=.45, label=text), size = 3.5, hjust=0) + geom_text(data=Bal_metan_drugIndiv_sumtab, aes(x=-1.8, label=k), size = 3.5, hjust=0) + geom_text(data=Bal_metan_drugIndiv_sumtab, aes(x=-1.55, label=total), size = 3.5, hjust=0)

pdf(file="Bal_metan_drugIndiv_forest.pdf",width=10,height=5)
Bal_metan_drugIndiv_forest
dev.off()


########

## calculate sample size needed for average results
## mean comm_SD = Bal_commSD_mean
## meta-analysis mean difference = Bal_metan_class_main[["TE.random"]]
## calculate Cohen's d
Bal_cohen_d = Bal_metan_class_main[["TE.random"]] / Bal_commSD_mean

Bal_samplesize_av <- pwr.t.test(d = Bal_cohen_d, power = 0.80, sig.level = 0.05)
## n = 16 - number in **each** group

## find number of studies with n > Bal_samplesize_av

Bal_data$total = Bal_data$Bal_Int_size + Bal_data$Bal_Pla_size

Bal_pwrcount <- Bal_data %>% group_by(total, Paper) %>% summarise(n = n())

Bal_pwrcount_adequate = subset(Bal_pwrcount, total >= 2*(Bal_samplesize_av[["n"]]))
write.table(Bal_pwrcount_adequate,file="Bal_pwrcount_adequate.csv",sep=",")

########

## run meta-regressions on full Bal dataset for continuous traits

Bal_metan_full <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## create metan with >3 for each level of categorical variables

## Background

Bal_bg_counts <- Bal_data %>% group_by(Background_simple, Study) %>% summarise(n = n())
Bal_bg_counts_sum <- Bal_bg_counts %>% group_by(Background_simple) %>% summarise(n = n())

Bal_bg_less3 = subset(Bal_bg_counts_sum, n <3)
Bal_bg_less3$Background_simple <- droplevels(Bal_bg_less3$Background_simple)
Bal_bg_droplist <- Bal_bg_less3$Background_simple

Bal_data_min3bg <- Bal_data %>% filter(!Background_simple %in% Bal_bg_droplist)

Bal_metan_bg <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## Model 

Bal_model_counts <- Bal_data %>% group_by(Model_simple, Study) %>% summarise(n = n())
Bal_model_counts_sum <- Bal_model_counts %>% group_by(Model_simple) %>% summarise(n = n())

Bal_model_less3 = subset(Bal_model_counts_sum, n <3)
Bal_model_less3$Model_simple <- droplevels(Bal_model_less3$Model_simple)
Bal_model_droplist <- Bal_model_less3$Model_simple

Bal_data_min3model <- Bal_data %>% filter(!Model_simple %in% Bal_model_droplist)

Bal_metan_model <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## run metaregs

Bal_reg_Qual_score <- metareg(Bal_metan_full, Qual_score)
Bal_reg_Qual_score_tab <- data.frame(Bal_reg_Qual_score[["beta"]])
Bal_reg_Qual_score_tab$se <- Bal_reg_Qual_score[["se"]]
Bal_reg_Qual_score_tab$pval <- Bal_reg_Qual_score[["pval"]]
Bal_reg_Qual_score_tab$beta <- Bal_reg_Qual_score[["beta"]]
Bal_reg_Qual_score_tab <- Bal_reg_Qual_score_tab[-c(1),]
Bal_reg_Qual_score_tab <- Bal_reg_Qual_score_tab[-c(1)]
Bal_reg_Qual_score_tab$k <- Bal_reg_Qual_score[["k"]]
Bal_reg_Qual_score_tab$r2 <- Bal_reg_Qual_score[["R2"]]
Bal_reg_Qual_score_tab$var <- "Qual_score"

Bal_reg_Protocol <- metareg(Bal_metan_full, Protocol)
Bal_reg_Protocol_tab <- data.frame(Bal_reg_Protocol[["beta"]])
Bal_reg_Protocol_tab$se <- Bal_reg_Protocol[["se"]]
Bal_reg_Protocol_tab$pval <- Bal_reg_Protocol[["pval"]]
Bal_reg_Protocol_tab$beta <- Bal_reg_Protocol[["beta"]]
Bal_reg_Protocol_tab <- Bal_reg_Protocol_tab[-c(1),]
Bal_reg_Protocol_tab <- Bal_reg_Protocol_tab[-c(1)]
Bal_reg_Protocol_tab$k <- Bal_reg_Protocol[["k"]]
Bal_reg_Protocol_tab$r2 <- Bal_reg_Protocol[["R2"]]
Bal_reg_Protocol_tab$var <- "Protocol"

Bal_reg_Randomisation <- metareg(Bal_metan_full, Randomisation)
Bal_reg_Randomisation_tab <- data.frame(Bal_reg_Randomisation[["beta"]])
Bal_reg_Randomisation_tab$se <- Bal_reg_Randomisation[["se"]]
Bal_reg_Randomisation_tab$pval <- Bal_reg_Randomisation[["pval"]]
Bal_reg_Randomisation_tab$beta <- Bal_reg_Randomisation[["beta"]]
Bal_reg_Randomisation_tab <- Bal_reg_Randomisation_tab[-c(1),]
Bal_reg_Randomisation_tab <- Bal_reg_Randomisation_tab[-c(1)]
Bal_reg_Randomisation_tab$k <- Bal_reg_Randomisation[["k"]]
Bal_reg_Randomisation_tab$r2 <- Bal_reg_Randomisation[["R2"]]
Bal_reg_Randomisation_tab$var <- "Randomisation"

Bal_reg_Blinding <- metareg(Bal_metan_full, Blinding)
Bal_reg_Blinding_tab <- data.frame(Bal_reg_Blinding[["beta"]])
Bal_reg_Blinding_tab$se <- Bal_reg_Blinding[["se"]]
Bal_reg_Blinding_tab$pval <- Bal_reg_Blinding[["pval"]]
Bal_reg_Blinding_tab$beta <- Bal_reg_Blinding[["beta"]]
Bal_reg_Blinding_tab <- Bal_reg_Blinding_tab[-c(1),]
Bal_reg_Blinding_tab <- Bal_reg_Blinding_tab[-c(1)]
Bal_reg_Blinding_tab$k <- Bal_reg_Blinding[["k"]]
Bal_reg_Blinding_tab$r2 <- Bal_reg_Blinding[["R2"]]
Bal_reg_Blinding_tab$var <- "Blinding"

Bal_reg_Power_calculation <- metareg(Bal_metan_full, Power_calculation)
Bal_reg_Power_calculation_tab <- data.frame(Bal_reg_Power_calculation[["beta"]])
Bal_reg_Power_calculation_tab$se <- Bal_reg_Power_calculation[["se"]]
Bal_reg_Power_calculation_tab$pval <- Bal_reg_Power_calculation[["pval"]]
Bal_reg_Power_calculation_tab$beta <- Bal_reg_Power_calculation[["beta"]]
Bal_reg_Power_calculation_tab <- Bal_reg_Power_calculation_tab[-c(1),]
Bal_reg_Power_calculation_tab <- Bal_reg_Power_calculation_tab[-c(1)]
Bal_reg_Power_calculation_tab$k <- Bal_reg_Power_calculation[["k"]]
Bal_reg_Power_calculation_tab$r2 <- Bal_reg_Power_calculation[["R2"]]
Bal_reg_Power_calculation_tab$var <- "Power_calculation"

Bal_reg_Chol_per <- metareg(Bal_metan_full, Chol_per)
Bal_reg_Chol_per_tab <- data.frame(Bal_reg_Chol_per[["beta"]])
Bal_reg_Chol_per_tab$se <- Bal_reg_Chol_per[["se"]]
Bal_reg_Chol_per_tab$pval <- Bal_reg_Chol_per[["pval"]]
Bal_reg_Chol_per_tab$beta <- Bal_reg_Chol_per[["beta"]]
Bal_reg_Chol_per_tab <- Bal_reg_Chol_per_tab[-c(1),]
Bal_reg_Chol_per_tab <- Bal_reg_Chol_per_tab[-c(1)]
Bal_reg_Chol_per_tab$k <- Bal_reg_Chol_per[["k"]]
Bal_reg_Chol_per_tab$r2 <- Bal_reg_Chol_per[["R2"]]
Bal_reg_Chol_per_tab$var <- "Chol_per"

Bal_reg_log_FructGluc_per <- metareg(Bal_metan_full, log_FructGluc_per)
Bal_reg_log_FructGluc_per_tab <- data.frame(Bal_reg_log_FructGluc_per[["beta"]])
Bal_reg_log_FructGluc_per_tab$se <- Bal_reg_log_FructGluc_per[["se"]]
Bal_reg_log_FructGluc_per_tab$pval <- Bal_reg_log_FructGluc_per[["pval"]]
Bal_reg_log_FructGluc_per_tab$beta <- Bal_reg_log_FructGluc_per[["beta"]]
Bal_reg_log_FructGluc_per_tab <- Bal_reg_log_FructGluc_per_tab[-c(1),]
Bal_reg_log_FructGluc_per_tab <- Bal_reg_log_FructGluc_per_tab[-c(1)]
Bal_reg_log_FructGluc_per_tab$k <- Bal_reg_log_FructGluc_per[["k"]]
Bal_reg_log_FructGluc_per_tab$r2 <- Bal_reg_log_FructGluc_per[["R2"]]
Bal_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per"

Bal_reg_log_Sucr_kcal <- metareg(Bal_metan_full, log_Sucr_kcal)
Bal_reg_log_Sucr_kcal_tab <- data.frame(Bal_reg_log_Sucr_kcal[["beta"]])
Bal_reg_log_Sucr_kcal_tab$se <- Bal_reg_log_Sucr_kcal[["se"]]
Bal_reg_log_Sucr_kcal_tab$pval <- Bal_reg_log_Sucr_kcal[["pval"]]
Bal_reg_log_Sucr_kcal_tab$beta <- Bal_reg_log_Sucr_kcal[["beta"]]
Bal_reg_log_Sucr_kcal_tab <- Bal_reg_log_Sucr_kcal_tab[-c(1),]
Bal_reg_log_Sucr_kcal_tab <- Bal_reg_log_Sucr_kcal_tab[-c(1)]
Bal_reg_log_Sucr_kcal_tab$k <- Bal_reg_log_Sucr_kcal[["k"]]
Bal_reg_log_Sucr_kcal_tab$r2 <- Bal_reg_log_Sucr_kcal[["R2"]]
Bal_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal"

Bal_reg_log_Fat_kcal <- metareg(Bal_metan_full, log_Fat_kcal)
Bal_reg_log_Fat_kcal_tab <- data.frame(Bal_reg_log_Fat_kcal[["beta"]])
Bal_reg_log_Fat_kcal_tab$se <- Bal_reg_log_Fat_kcal[["se"]]
Bal_reg_log_Fat_kcal_tab$pval <- Bal_reg_log_Fat_kcal[["pval"]]
Bal_reg_log_Fat_kcal_tab$beta <- Bal_reg_log_Fat_kcal[["beta"]]
Bal_reg_log_Fat_kcal_tab <- Bal_reg_log_Fat_kcal_tab[-c(1),]
Bal_reg_log_Fat_kcal_tab <- Bal_reg_log_Fat_kcal_tab[-c(1)]
Bal_reg_log_Fat_kcal_tab$k <- Bal_reg_log_Fat_kcal[["k"]]
Bal_reg_log_Fat_kcal_tab$r2 <- Bal_reg_log_Fat_kcal[["R2"]]
Bal_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal"

Bal_reg_log_Age_start <- metareg(Bal_metan_full, log_Age_start)
Bal_reg_log_Age_start_tab <- data.frame(Bal_reg_log_Age_start[["beta"]])
Bal_reg_log_Age_start_tab$se <- Bal_reg_log_Age_start[["se"]]
Bal_reg_log_Age_start_tab$pval <- Bal_reg_log_Age_start[["pval"]]
Bal_reg_log_Age_start_tab$beta <- Bal_reg_log_Age_start[["beta"]]
Bal_reg_log_Age_start_tab <- Bal_reg_log_Age_start_tab[-c(1),]
Bal_reg_log_Age_start_tab <- Bal_reg_log_Age_start_tab[-c(1)]
Bal_reg_log_Age_start_tab$k <- Bal_reg_log_Age_start[["k"]]
Bal_reg_log_Age_start_tab$r2 <- Bal_reg_log_Age_start[["R2"]]
Bal_reg_log_Age_start_tab$var <- "log_Age_start"

Bal_reg_log_Duration <- metareg(Bal_metan_full, log_Duration)
Bal_reg_log_Duration_tab <- data.frame(Bal_reg_log_Duration[["beta"]])
Bal_reg_log_Duration_tab$se <- Bal_reg_log_Duration[["se"]]
Bal_reg_log_Duration_tab$pval <- Bal_reg_log_Duration[["pval"]]
Bal_reg_log_Duration_tab$beta <- Bal_reg_log_Duration[["beta"]]
Bal_reg_log_Duration_tab <- Bal_reg_log_Duration_tab[-c(1),]
Bal_reg_log_Duration_tab <- Bal_reg_log_Duration_tab[-c(1)]
Bal_reg_log_Duration_tab$k <- Bal_reg_log_Duration[["k"]]
Bal_reg_log_Duration_tab$r2 <- Bal_reg_log_Duration[["R2"]]
Bal_reg_log_Duration_tab$var <- "log_Duration"

Bal_reg_log_Age_end <- metareg(Bal_metan_full, log_Age_end)
Bal_reg_log_Age_end_tab <- data.frame(Bal_reg_log_Age_end[["beta"]])
Bal_reg_log_Age_end_tab$se <- Bal_reg_log_Age_end[["se"]]
Bal_reg_log_Age_end_tab$pval <- Bal_reg_log_Age_end[["pval"]]
Bal_reg_log_Age_end_tab$beta <- Bal_reg_log_Age_end[["beta"]]
Bal_reg_log_Age_end_tab <- Bal_reg_log_Age_end_tab[-c(1),]
Bal_reg_log_Age_end_tab <- Bal_reg_log_Age_end_tab[-c(1)]
Bal_reg_log_Age_end_tab$k <- Bal_reg_log_Age_end[["k"]]
Bal_reg_log_Age_end_tab$r2 <- Bal_reg_log_Age_end[["R2"]]
Bal_reg_log_Age_end_tab$var <- "log_Age_end"

Bal_reg_log_Wt_change <- metareg(Bal_metan_full, log_Wt_change)
Bal_reg_log_Wt_change_tab <- data.frame(Bal_reg_log_Wt_change[["beta"]])
Bal_reg_log_Wt_change_tab$se <- Bal_reg_log_Wt_change[["se"]]
Bal_reg_log_Wt_change_tab$pval <- Bal_reg_log_Wt_change[["pval"]]
Bal_reg_log_Wt_change_tab$beta <- Bal_reg_log_Wt_change[["beta"]]
Bal_reg_log_Wt_change_tab <- Bal_reg_log_Wt_change_tab[-c(1),]
Bal_reg_log_Wt_change_tab <- Bal_reg_log_Wt_change_tab[-c(1)]
Bal_reg_log_Wt_change_tab$k <- Bal_reg_log_Wt_change[["k"]]
Bal_reg_log_Wt_change_tab$r2 <- Bal_reg_log_Wt_change[["R2"]]
Bal_reg_log_Wt_change_tab$var <- "log_Wt_change"

Bal_reg_log_Gluc_change <- metareg(Bal_metan_full, log_Gluc_change)
Bal_reg_log_Gluc_change_tab <- data.frame(Bal_reg_log_Gluc_change[["beta"]])
Bal_reg_log_Gluc_change_tab$se <- Bal_reg_log_Gluc_change[["se"]]
Bal_reg_log_Gluc_change_tab$pval <- Bal_reg_log_Gluc_change[["pval"]]
Bal_reg_log_Gluc_change_tab$beta <- Bal_reg_log_Gluc_change[["beta"]]
Bal_reg_log_Gluc_change_tab <- Bal_reg_log_Gluc_change_tab[-c(1),]
Bal_reg_log_Gluc_change_tab <- Bal_reg_log_Gluc_change_tab[-c(1)]
Bal_reg_log_Gluc_change_tab$k <- Bal_reg_log_Gluc_change[["k"]]
Bal_reg_log_Gluc_change_tab$r2 <- Bal_reg_log_Gluc_change[["R2"]]
Bal_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

Bal_reg_log_Insul_change <- metareg(Bal_metan_full, log_Insul_change)
Bal_reg_log_Insul_change_tab <- data.frame(Bal_reg_log_Insul_change[["beta"]])
Bal_reg_log_Insul_change_tab$se <- Bal_reg_log_Insul_change[["se"]]
Bal_reg_log_Insul_change_tab$pval <- Bal_reg_log_Insul_change[["pval"]]
Bal_reg_log_Insul_change_tab$beta <- Bal_reg_log_Insul_change[["beta"]]
Bal_reg_log_Insul_change_tab <- Bal_reg_log_Insul_change_tab[-c(1),]
Bal_reg_log_Insul_change_tab <- Bal_reg_log_Insul_change_tab[-c(1)]
Bal_reg_log_Insul_change_tab$k <- Bal_reg_log_Insul_change[["k"]]
Bal_reg_log_Insul_change_tab$r2 <- Bal_reg_log_Insul_change[["R2"]]
Bal_reg_log_Insul_change_tab$var <- "log_Insul_change"

Bal_reg_Sex <- metareg(Bal_metan_full, Sex)
Bal_reg_Sex_tab <- data.frame(Bal_reg_Sex[["beta"]])
Bal_reg_Sex_tab$se <- Bal_reg_Sex[["se"]]
Bal_reg_Sex_tab$pval <- Bal_reg_Sex[["pval"]]
Bal_reg_Sex_tab$beta <- Bal_reg_Sex[["beta"]]
Bal_reg_Sex_tab <- Bal_reg_Sex_tab[-c(1),]
Bal_reg_Sex_tab <- Bal_reg_Sex_tab[-c(1)]
Bal_reg_Sex_tab$k <- Bal_reg_Sex[["k"]]
Bal_reg_Sex_tab$r2 <- NA
Bal_reg_Sex_tab$var <- rownames(Bal_reg_Sex_tab)
Bal_reg_Sex_overall_tab <- data.frame(Bal_reg_Sex[["QMp"]])
Bal_reg_Sex_overall_tab$se <- NA
Bal_reg_Sex_overall_tab$pval <- Bal_reg_Sex[["QMp"]]
Bal_reg_Sex_overall_tab$beta <- NA
Bal_reg_Sex_overall_tab <- Bal_reg_Sex_overall_tab[-c(1)]
Bal_reg_Sex_overall_tab$k <- Bal_reg_Sex[["k"]]
Bal_reg_Sex_overall_tab$r2 <- Bal_reg_Sex[["R2"]]
Bal_reg_Sex_overall_tab$var <- "Sex_overall"
Bal_reg_Sex_tab <- rbind(Bal_reg_Sex_tab, Bal_reg_Sex_overall_tab)

Bal_reg_Drug_dose <- metareg(Bal_metan_drugIndiv, Drug_dose)
Bal_reg_Drug_dose_tab <- data.frame(Bal_reg_Drug_dose[["beta"]])
Bal_reg_Drug_dose_tab$se <- Bal_reg_Drug_dose[["se"]]
Bal_reg_Drug_dose_tab$pval <- Bal_reg_Drug_dose[["pval"]]
Bal_reg_Drug_dose_tab$beta <- Bal_reg_Drug_dose[["beta"]]
Bal_reg_Drug_dose_tab <- Bal_reg_Drug_dose_tab[-c(1),]
Bal_reg_Drug_dose_tab <- Bal_reg_Drug_dose_tab[-c(1)]
Bal_reg_Drug_dose_tab$k <- Bal_reg_Drug_dose[["k"]]
Bal_reg_Drug_dose_tab$r2 <- Bal_reg_Drug_dose[["R2"]]
Bal_reg_Drug_dose_tab$var <- "Drug_dose"

Bal_reg_Indiv_drug_class_3 <- metareg(Bal_metan_drugIndiv, Indiv_drug_class_3)
Bal_reg_Indiv_drug_class_3_tab <- data.frame(Bal_reg_Indiv_drug_class_3[["beta"]])
Bal_reg_Indiv_drug_class_3_tab$se <- Bal_reg_Indiv_drug_class_3[["se"]]
Bal_reg_Indiv_drug_class_3_tab$pval <- Bal_reg_Indiv_drug_class_3[["pval"]]
Bal_reg_Indiv_drug_class_3_tab$beta <- Bal_reg_Indiv_drug_class_3[["beta"]]
Bal_reg_Indiv_drug_class_3_tab <- Bal_reg_Indiv_drug_class_3_tab[-c(1),]
Bal_reg_Indiv_drug_class_3_tab <- Bal_reg_Indiv_drug_class_3_tab[-c(1)]
Bal_reg_Indiv_drug_class_3_tab$k <- Bal_reg_Indiv_drug_class_3[["k"]]
Bal_reg_Indiv_drug_class_3_tab$r2 <- NA
Bal_reg_Indiv_drug_class_3_tab$var <- rownames(Bal_reg_Indiv_drug_class_3_tab)
Bal_reg_Indiv_drug_class_3_overall_tab <- data.frame(Bal_reg_Indiv_drug_class_3[["QMp"]])
Bal_reg_Indiv_drug_class_3_overall_tab$se <- NA
Bal_reg_Indiv_drug_class_3_overall_tab$pval <- Bal_reg_Indiv_drug_class_3[["QMp"]]
Bal_reg_Indiv_drug_class_3_overall_tab$beta <- NA
Bal_reg_Indiv_drug_class_3_overall_tab <- Bal_reg_Indiv_drug_class_3_overall_tab[-c(1)]
Bal_reg_Indiv_drug_class_3_overall_tab$k <- Bal_reg_Indiv_drug_class_3[["k"]]
Bal_reg_Indiv_drug_class_3_overall_tab$r2 <- Bal_reg_Indiv_drug_class_3[["R2"]]
Bal_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall"
Bal_reg_Indiv_drug_class_3_tab <- rbind(Bal_reg_Indiv_drug_class_3_tab, Bal_reg_Indiv_drug_class_3_overall_tab)

Bal_reg_Model_simple <- metareg(Bal_metan_model, Model_simple)
Bal_reg_Model_simple_tab <- data.frame(Bal_reg_Model_simple[["beta"]])
Bal_reg_Model_simple_tab$se <- Bal_reg_Model_simple[["se"]]
Bal_reg_Model_simple_tab$pval <- Bal_reg_Model_simple[["pval"]]
Bal_reg_Model_simple_tab$beta <- Bal_reg_Model_simple[["beta"]]
Bal_reg_Model_simple_tab <- Bal_reg_Model_simple_tab[-c(1),]
Bal_reg_Model_simple_tab <- Bal_reg_Model_simple_tab[-c(1)]
Bal_reg_Model_simple_tab$k <- Bal_reg_Model_simple[["k"]]
Bal_reg_Model_simple_tab$r2 <- NA
Bal_reg_Model_simple_tab$var <- rownames(Bal_reg_Model_simple_tab)
Bal_reg_Model_simple_overall_tab <- data.frame(Bal_reg_Model_simple[["QMp"]])
Bal_reg_Model_simple_overall_tab$se <- NA
Bal_reg_Model_simple_overall_tab$pval <- Bal_reg_Model_simple[["QMp"]]
Bal_reg_Model_simple_overall_tab$beta <- NA
Bal_reg_Model_simple_overall_tab <- Bal_reg_Model_simple_overall_tab[-c(1)]
Bal_reg_Model_simple_overall_tab$k <- Bal_reg_Model_simple[["k"]]
Bal_reg_Model_simple_overall_tab$r2 <- Bal_reg_Model_simple[["R2"]]
Bal_reg_Model_simple_overall_tab$var <- "Model_simple_overall"
Bal_reg_Model_simple_tab <- rbind(Bal_reg_Model_simple_tab, Bal_reg_Model_simple_overall_tab)

Bal_reg_Background_simple <- metareg(Bal_metan_bg, Background_simple)
Bal_reg_Background_simple_tab <- data.frame(Bal_reg_Background_simple[["beta"]])
Bal_reg_Background_simple_tab$se <- Bal_reg_Background_simple[["se"]]
Bal_reg_Background_simple_tab$pval <- Bal_reg_Background_simple[["pval"]]
Bal_reg_Background_simple_tab$beta <- Bal_reg_Background_simple[["beta"]]
Bal_reg_Background_simple_tab <- Bal_reg_Background_simple_tab[-c(1),]
Bal_reg_Background_simple_tab <- Bal_reg_Background_simple_tab[-c(1)]
Bal_reg_Background_simple_tab$k <- Bal_reg_Background_simple[["k"]]
Bal_reg_Background_simple_tab$r2 <- NA
Bal_reg_Background_simple_tab$var <- rownames(Bal_reg_Background_simple_tab)
Bal_reg_Background_simple_overall_tab <- data.frame(Bal_reg_Background_simple[["QMp"]])
Bal_reg_Background_simple_overall_tab$se <- NA
Bal_reg_Background_simple_overall_tab$pval <- Bal_reg_Background_simple[["QMp"]]
Bal_reg_Background_simple_overall_tab$beta <- NA
Bal_reg_Background_simple_overall_tab <- Bal_reg_Background_simple_overall_tab[-c(1)]
Bal_reg_Background_simple_overall_tab$k <- Bal_reg_Background_simple[["k"]]
Bal_reg_Background_simple_overall_tab$r2 <- Bal_reg_Background_simple[["R2"]]
Bal_reg_Background_simple_overall_tab$var <- "Background_simple_overall"
Bal_reg_Background_simple_tab <- rbind(Bal_reg_Background_simple_tab, Bal_reg_Background_simple_overall_tab)

Bal_metareg_sumtab <- rbind(Bal_reg_Qual_score_tab, Bal_reg_Protocol_tab, Bal_reg_Randomisation_tab, Bal_reg_Blinding_tab, Bal_reg_Power_calculation_tab, Bal_reg_Chol_per_tab, Bal_reg_log_FructGluc_per_tab, Bal_reg_log_Sucr_kcal_tab, Bal_reg_log_Fat_kcal_tab, Bal_reg_log_Age_start_tab, Bal_reg_log_Duration_tab, Bal_reg_log_Age_end_tab, Bal_reg_log_Wt_change_tab, Bal_reg_log_Gluc_change_tab, Bal_reg_log_Insul_change_tab, Bal_reg_Sex_tab, Bal_reg_Drug_dose_tab, Bal_reg_Indiv_drug_class_3_tab, Bal_reg_Model_simple_tab, Bal_reg_Background_simple_tab)

Bal_metareg_sumtab$text <- paste(format(round(Bal_metareg_sumtab$beta, 1), nsmall = 1), format(round(Bal_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Bal_metareg_sumtab$text <- paste(Bal_metareg_sumtab$text, "", sep = ")", collapse = NULL)
Bal_metareg_sumtab$pval_2dig <- paste((signif(Bal_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
Bal_metareg_sumtab$r2_2dig <- paste(format(round(Bal_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(Bal_metareg_sumtab,file="Bal_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="Bal_bubble_Wt_change.pdf",width=6,height=6)
Bal_bubble_Wt_change <- bubble(Bal_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
Bal_bubble_Wt_change
dev.off()

pdf(file="Bal_bubble_Gluc_change.pdf",width=6,height=6)
Bal_bubble_Gluc_change <- bubble(Bal_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
Bal_bubble_Gluc_change
dev.off()

pdf(file="Bal_bubble_FructGluc_per.pdf",width=6,height=6)
Bal_bubble_FructGluc_per <- bubble(Bal_reg_log_FructGluc_per, xlab = "Log fat in diet (% kcal)", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-2.5, 1.2), xlim = c(2,4))
Bal_bubble_FructGluc_per
dev.off()

pdf(file="Bal_bubble_Fat_kcal.pdf",width=6,height=6)
Bal_bubble_Fat_kcal <- bubble(Bal_reg_log_Fat_kcal, xlab = "Log fructose in diet (% weight)", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-2.5, 1.2), xlim = c(3, 4.5))
Bal_bubble_Fat_kcal
dev.off()

pdf(file="Bal_bubble_log_Duration.pdf",width=6,height=6)
Bal_bubble_log_Duration <- bubble(Bal_reg_log_Duration, xlab = "Study quality score (0-4)", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5, ylim = c(-2.5, 1.2), xlim = c(0, 4))
Bal_bubble_log_Duration
dev.off()


##########

##### run multiple meta-regression

## create data subset including >3 for each model >3 for background, and >3 for each drug

## start with dataset containing >3 for each background = Bal_data_min3bg

Bal_data_min3bg_modelcounts <- Bal_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
Bal_data_min3bg_modelcounts_sum <- Bal_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

Bal_data_min3bg_model_less3 = subset(Bal_data_min3bg_modelcounts_sum, n <3)
Bal_data_min3bg_model_less3$Model_simple <- droplevels(Bal_data_min3bg_model_less3$Model_simple)
Bal_data_min3bg_model_droplist <- Bal_data_min3bg_model_less3$Model_simple

Bal_multimetareg_data <- Bal_data_min3bg %>% filter(!Model_simple %in% Bal_data_min3bg_model_droplist)



## run multiple meta-regression

## create data subset including >3 for each model and >3 for background

## start with dataset containing >3 for each background = Bal_data_min3bg

Bal_data_min3bg_modelcounts <- Bal_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
Bal_data_min3bg_modelcounts_sum <- Bal_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

Bal_data_min3bg_model_less3 = subset(Bal_data_min3bg_modelcounts_sum, n <3)
Bal_data_min3bg_model_less3$Model_simple <- droplevels(Bal_data_min3bg_model_less3$Model_simple)
Bal_data_min3bg_model_droplist <- Bal_data_min3bg_model_less3$Model_simple

Bal_multimetareg_data <- Bal_data_min3bg %>% filter(!Model_simple %in% Bal_data_min3bg_model_droplist)

## Run metan

Bal_multimetareg_metan <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")


library(metafor)

Bal_multmetareg_tab <- data.frame(Bal_multimetareg_metan$studlab)
Bal_multmetareg_tab$yi <- Bal_multimetareg_metan[["TE"]]
Bal_multmetareg_tab$sei <- Bal_multimetareg_metan[["seTE"]]
Bal_multmetareg_tab$Model_simple <- Bal_multimetareg_metan[["data"]][["Model_simple"]]
Bal_multmetareg_tab$Background_simple <- Bal_multimetareg_metan[["data"]][["Background_simple"]]
Bal_multmetareg_tab$Sex <- Bal_multimetareg_metan[["data"]][["Sex"]]
Bal_multmetareg_tab$Indiv_drug_class_3 <- Bal_multimetareg_metan[["data"]][["Indiv_drug_class_3"]]
Bal_multmetareg_tab$log_Fat_kcal <- Bal_multimetareg_metan[["data"]][["log_Fat_kcal"]]
Bal_multmetareg_tab$log_Age_start <- Bal_multimetareg_metan[["data"]][["log_Age_start"]]
Bal_multmetareg_tab$log_Age_end <- Bal_multimetareg_metan[["data"]][["log_Age_end"]]
Bal_multmetareg_tab$log_Duration <- Bal_multimetareg_metan[["data"]][["log_Duration"]]
Bal_multmetareg_tab$log_Wt_change <- Bal_multimetareg_metan[["data"]][["log_Wt_change"]]
Bal_multmetareg_tab$log_Gluc_change <- Bal_multimetareg_metan[["data"]][["log_Gluc_change"]]
Bal_multmetareg_tab$log_Insul_change <- Bal_multimetareg_metan[["data"]][["log_Insul_change"]]
Bal_multmetareg_tab$Qual_score <- Bal_multimetareg_metan[["data"]][["Qual_score"]]

Bal_multmetareg_tab_cor <- cor(Bal_multmetareg_tab[,8:15], use="complete.obs")
Bal_multmetareg_tab_cor

library(PerformanceAnalytics)
chart.Correlation(Bal_multmetareg_tab[,8:15], use="complete.obs")

## high correlations between variables, therefore drop: Wt_change, insulin change, & age start


library(dmetar)

Bal_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = Bal_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_end", "log_Duration", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE)
Bal_multi_intereference1

sink("Bal_multi_intereference1.txt")
print(Bal_multi_intereference1)
sink()

## run multi-metareg for top model 1

Bal_multmetareg_1 <- rma(yi = yi, sei = sei, data = Bal_multmetareg_tab, method = "ML", mods = ~ log_Gluc_change, test="knha")

Bal_multmetareg_1_tab <- coef(summary(Bal_multmetareg_1))
Bal_multmetareg_1_tab$rownames <- rownames(Bal_multmetareg_1_tab)

Bal_multmetareg_1_tab$mod1_text <- paste(format(round(Bal_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(Bal_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Bal_multmetareg_1_tab$mod1_text <- paste(Bal_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL)
Bal_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(Bal_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL)

## check robustness using permutation test

Bal_multmetareg_1_permut <- permutest(Bal_multmetareg_1)

sink("Bal_multmetareg_1_permut.txt")
print(Bal_multmetareg_1_permut)
sink()

## insufficient data to repeat multiple meta-reg using individual drugs in addition to other variables

Bal_multmetareg_sumtab <- Bal_multmetareg_1_tab
write.table(Bal_multmetareg_sumtab, "Bal_multmetareg_sumtab.csv", sep=",")


## See if meta-regression results change after removal of weight-loss diets

library(tidyverse)

Bal_NoWtLoss_data <- Bal_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD')


Bal_NoWtLoss_metan_full <- metacont(Bal_Int_size, Bal_Int_Mean, Bal_Int_SD, Bal_Pla_size, Bal_Pla_Mean, Bal_Pla_SD, data = Bal_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Bal_NoWtLoss_reg_log_Wt_change <- metareg(Bal_NoWtLoss_metan_full, log_Wt_change)
Bal_NoWtLoss_reg_log_Wt_change_tab <- data.frame(Bal_NoWtLoss_reg_log_Wt_change[["beta"]])
Bal_NoWtLoss_reg_log_Wt_change_tab$se <- Bal_NoWtLoss_reg_log_Wt_change[["se"]]
Bal_NoWtLoss_reg_log_Wt_change_tab$pval <- Bal_NoWtLoss_reg_log_Wt_change[["pval"]]
Bal_NoWtLoss_reg_log_Wt_change_tab$beta <- Bal_NoWtLoss_reg_log_Wt_change[["beta"]]
Bal_NoWtLoss_reg_log_Wt_change_tab <- Bal_NoWtLoss_reg_log_Wt_change_tab[-c(1),]
Bal_NoWtLoss_reg_log_Wt_change_tab <- Bal_NoWtLoss_reg_log_Wt_change_tab[-c(1)]
Bal_NoWtLoss_reg_log_Wt_change_tab$k <- Bal_NoWtLoss_reg_log_Wt_change[["k"]]
Bal_NoWtLoss_reg_log_Wt_change_tab$r2 <- Bal_NoWtLoss_reg_log_Wt_change[["R2"]]
Bal_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change"

Bal_NoWtLoss_reg_log_Gluc_change <- metareg(Bal_NoWtLoss_metan_full, log_Gluc_change)
Bal_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(Bal_NoWtLoss_reg_log_Gluc_change[["beta"]])
Bal_NoWtLoss_reg_log_Gluc_change_tab$se <- Bal_NoWtLoss_reg_log_Gluc_change[["se"]]
Bal_NoWtLoss_reg_log_Gluc_change_tab$pval <- Bal_NoWtLoss_reg_log_Gluc_change[["pval"]]
Bal_NoWtLoss_reg_log_Gluc_change_tab$beta <- Bal_NoWtLoss_reg_log_Gluc_change[["beta"]]
Bal_NoWtLoss_reg_log_Gluc_change_tab <- Bal_NoWtLoss_reg_log_Gluc_change_tab[-c(1),]
Bal_NoWtLoss_reg_log_Gluc_change_tab <- Bal_NoWtLoss_reg_log_Gluc_change_tab[-c(1)]
Bal_NoWtLoss_reg_log_Gluc_change_tab$k <- Bal_NoWtLoss_reg_log_Gluc_change[["k"]]
Bal_NoWtLoss_reg_log_Gluc_change_tab$r2 <- Bal_NoWtLoss_reg_log_Gluc_change[["R2"]]
Bal_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

Bal_NoWtLoss_reg_log_Insul_change <- metareg(Bal_NoWtLoss_metan_full, log_Insul_change)
Bal_NoWtLoss_reg_log_Insul_change_tab <- data.frame(Bal_NoWtLoss_reg_log_Insul_change[["beta"]])
Bal_NoWtLoss_reg_log_Insul_change_tab$se <- Bal_NoWtLoss_reg_log_Insul_change[["se"]]
Bal_NoWtLoss_reg_log_Insul_change_tab$pval <- Bal_NoWtLoss_reg_log_Insul_change[["pval"]]
Bal_NoWtLoss_reg_log_Insul_change_tab$beta <- Bal_NoWtLoss_reg_log_Insul_change[["beta"]]
Bal_NoWtLoss_reg_log_Insul_change_tab <- Bal_NoWtLoss_reg_log_Insul_change_tab[-c(1),]
Bal_NoWtLoss_reg_log_Insul_change_tab <- Bal_NoWtLoss_reg_log_Insul_change_tab[-c(1)]
Bal_NoWtLoss_reg_log_Insul_change_tab$k <- Bal_NoWtLoss_reg_log_Insul_change[["k"]]
Bal_NoWtLoss_reg_log_Insul_change_tab$r2 <- Bal_NoWtLoss_reg_log_Insul_change[["R2"]]
Bal_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change"

Bal_NoWtLoss_metareg_sumtab <- rbind(Bal_NoWtLoss_reg_log_Wt_change_tab, Bal_NoWtLoss_reg_log_Gluc_change_tab, Bal_NoWtLoss_reg_log_Insul_change_tab)

Bal_NoWtLoss_metareg_sumtab$text <- paste(format(round(Bal_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(Bal_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Bal_NoWtLoss_metareg_sumtab$text <- paste(Bal_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL)
Bal_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(Bal_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
Bal_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(Bal_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(Bal_NoWtLoss_metareg_sumtab,file="Bal_NoWtLoss_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="Bal_NoWtLoss_bubble_Wt_change.pdf",width=6,height=6)
Bal_NoWtLoss_bubble_Wt_change <- bubble(Bal_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
Bal_NoWtLoss_bubble_Wt_change
dev.off()

pdf(file="Bal_NoWtLoss_bubble_Gluc_change.pdf",width=6,height=6)
Bal_NoWtLoss_bubble_Gluc_change <- bubble(Bal_NoWtLoss_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in severity of ballooning", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
Bal_NoWtLoss_bubble_Gluc_change
dev.off()


## following on from Ballooning analysis

setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/Fib_out")


########

## Analysis for histological lobular inflammation grade (Fib)

########


## Power analysis
library(pwr)

## calculate common SD
full_data$Fib_Int_SD2 <- full_data$Fib_Int_SD*full_data$Fib_Int_SD
full_data$Fib_Pla_SD2 <- full_data$Fib_Pla_SD*full_data$Fib_Pla_SD
full_data$Fib_comm_SD <- sqrt(((full_data$Fib_Int_SD2+full_data$Fib_Pla_SD2)/2))
full_data$Fib_m_diff <- full_data$Fib_Pla_Mean-full_data$Fib_Int_Mean
full_data$Fib_eff_size <- full_data$Fib_m_diff/full_data$Fib_comm_SD

library(tidyr)

Fib_data <- full_data
Fib_data <- Fib_data %>% drop_na(Fib_eff_size)

Fib_data$power <- pwr.t2n.test(n1 = Fib_data$Fib_Int_size, n2 = Fib_data$Fib_Pla_size, d = Fib_data$Fib_eff_size)$power

write.table(Fib_data$power,file="Fib_data_power.csv",sep=",")

hist(Fib_data$power)

Fib_dens_power <- density(Fib_data$power)

pdf(file="Fib_kernel_power_v1.pdf")
plot(Fib_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)")
polygon(Fib_dens_power, col="red", border="blue")
dev.off()


## load packages for metan
library(dmetar)
library(meta)
library(metafor)
library(readxl)
max.print = 100000

## drop where <3 unique studies for any drug class
Fib_drugsclass_counts <- Fib_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
Fib_class_counts <- Fib_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

Fib_class_less3 = subset(Fib_class_counts, n <3)
str(Fib_class_less3)
Fib_class_less3$Drug_Class_new_1_all <- droplevels(Fib_class_less3$Drug_Class_new_1_all)
Fib_class_droplist <- Fib_class_less3$Drug_Class_new_1_all

Fib_data_min3class <- Fib_data %>% filter(!Drug_Class_new_1_all %in% Fib_class_droplist)


## run metan
Fib_metan_class_main <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Fib_metan_class <- update(Fib_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
Fib_metan_class_tab <- data.frame(Fib_metan_class[["TE.random.w"]])
Fib_metan_class_tab$drug <- Fib_metan_class[["bylevs"]]
Fib_metan_class_tab$SE <- Fib_metan_class[["seTE.random.w"]]
Fib_metan_class_tab$lower <- Fib_metan_class[["lower.random.w"]]
Fib_metan_class_tab$upper <- Fib_metan_class[["upper.random.w"]]
Fib_metan_class_tab$Pz <- Fib_metan_class[["pval.random.w"]]
Fib_metan_class_tab$weight <- Fib_metan_class[["w.random.w"]]
Fib_metan_class_tab$k <- Fib_metan_class[["k.w"]]
Fib_metan_class_tab$controls <- Fib_metan_class[["n.c.w"]]
Fib_metan_class_tab$experimental <- Fib_metan_class[["n.e.w"]]
Fib_metan_class_tab$Q <- Fib_metan_class[["Q.w"]]
Fib_metan_class_tab$Pq <- Fib_metan_class[["pval.Q.w"]]
Fib_metan_class_tab$tau <- Fib_metan_class[["tau.w"]]
Fib_metan_class_tab$I2 <- Fib_metan_class[["I2.w"]]
Fib_metan_class_tab <- Fib_metan_class_tab %>% rename(MD = Fib_metan_class...TE.random.w...)
Fib_metan_class_tab <- Fib_metan_class_tab[order(-Fib_metan_class_tab$MD),]
Fib_metan_class_tab$row_number <- 1:nrow(Fib_metan_class_tab) 
Fib_metan_class_tab$subgroup <- "Subgroup"
Fib_class_counts <- Fib_class_counts %>% rename(drug = Drug_Class_new_1_all)
Fib_metan_class_tab <- merge(Fib_class_counts, Fib_metan_class_tab, by="drug")

Fib_metan_class_tab_overall <- data.frame(Fib_metan_class[["TE.random"]])
Fib_metan_class_tab_overall$drug <- "Overall"
Fib_metan_class_tab_overall$SE <- Fib_metan_class[["seTE.random"]]
Fib_metan_class_tab_overall$lower <- Fib_metan_class[["lower.random"]]
Fib_metan_class_tab_overall$upper <- Fib_metan_class[["upper.random"]]
Fib_metan_class_tab_overall$Pz <- Fib_metan_class[["pval.random"]]
Fib_metan_class_tab_overall$weight <- (max(Fib_metan_class_tab$weight)*2)
Fib_metan_class_tab_overall$k <- Fib_metan_class[["k"]]
Fib_metan_class_tab_overall$controls <- sum(Fib_metan_class_tab$controls)
Fib_metan_class_tab_overall$experimental <- sum(Fib_metan_class_tab$experimental)
Fib_metan_class_tab_overall$Q <- Fib_metan_class[["Q"]]
Fib_metan_class_tab_overall$Pq <- Fib_metan_class[["pval.Q"]]
Fib_metan_class_tab_overall$tau <- Fib_metan_class[["tau"]]
Fib_metan_class_tab_overall$I2 <- Fib_metan_class[["I2"]]
Fib_metan_class_tab_overall <- Fib_metan_class_tab_overall %>% rename(MD = Fib_metan_class...TE.random...)
Fib_metan_class_tab_overall$row_number <- ((nrow(Fib_metan_class_tab))+1)
Fib_metan_class_tab_overall$subgroup <- "Overall"
Fib_metan_class_tab_overall$n <- sum(Fib_metan_class_tab$n)
Fib_metan_class_sumtab <- rbind(Fib_metan_class_tab, Fib_metan_class_tab_overall)
Fib_metan_class_sumtab$weight <- as.numeric(Fib_metan_class_sumtab$weight)
Fib_metan_class_sumtab$row_number <- as.numeric(Fib_metan_class_sumtab$row_number)
Fib_metan_class_sumtab$subgroup <- as.factor(Fib_metan_class_sumtab$subgroup)
Fib_metan_class_sumtab$total = Fib_metan_class_sumtab$controls + Fib_metan_class_sumtab$experimental

Fib_metan_class_sumtab$text <- paste(format(round(Fib_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Fib_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Fib_metan_class_sumtab$text <- paste(Fib_metan_class_sumtab$text, format(round(Fib_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Fib_metan_class_sumtab$text <- paste(Fib_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

Fib_metan_class_sumtab$SE_1dig <- paste(format(round(Fib_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Fib_metan_class_sumtab$Pz_1dig <- paste((signif(Fib_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Fib_metan_class_sumtab$tI2_2dig <- paste(format(round(Fib_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Fib_metan_class_sumtab$tau_1dig <- paste(format(round(Fib_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Fib_metan_class_sumtab$Pq_1dig <- paste((signif(Fib_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Fib_metan_class_sumtab,file="Fib_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(Fib_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Fib_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Fib_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = Fib_metan_class_tab_overall$lower
overall_max = Fib_metan_class_tab_overall$upper

Fib_metan_class_ybreaks <- nrow(Fib_metan_class_sumtab)
Fib_metan_class_sumtab <- Fib_metan_class_sumtab[order(Fib_metan_class_sumtab$row_number),]

Fib_metan_class_forest <- ggplot(data= Fib_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Fib_metan_class_ybreaks, labels = Fib_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in fibrosis stage") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.1, 1), breaks=seq(-1.5, .5, 0.5), expand=c(0,0)) + geom_text(data=Fib_metan_class_sumtab, aes(x=.2, label=text), size = 3.5, hjust=0) + geom_text(data=Fib_metan_class_sumtab, aes(x=-2, label=k), size = 3.5, hjust=0) + geom_text(data=Fib_metan_class_sumtab, aes(x=-1.8, label=total), size = 3.5, hjust=0)

pdf(file="Fib_metan_class_forest.pdf",width=9,height=3)
Fib_metan_class_forest
dev.off()

#####################

#######

## bias analysis

Fib_class_eggers <- eggers.test(x = Fib_metan_class_main)
Fib_class_eggers
sink("Fib_class_eggers.txt")
print(Fib_class_eggers)
sink()

Fib_class_trimfill <- trimfill(Fib_metan_class_main)
Fib_class_trimfill
sink("Fib_class_trimfill.txt")
print(Fib_class_trimfill)
sink()

pdf(file="Fib_class_funnel.pdf")
funnel(Fib_class_trimfill, xlab="Mean difference in hepatic Fib (%)", xlim=c(-4,4), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-3.5, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue"))
dev.off()

## use Baujat plot to look for outliers

pdf(file="Fib_class_baujat.pdf")
Fib_class_baujat <- baujat(Fib_metan_class_main)
Fib_class_baujat
dev.off()

## look for outliers based on SD

Fib_commSD_mean <- mean(Fib_data$Fib_comm_SD, na.rm=TRUE)
Fib_commSD_SD <- sd(Fib_data$Fib_comm_SD, na.rm=TRUE)

Fib_commSD_norm <- dnorm(Fib_data$Fib_comm_SD, mean = Fib_commSD_mean, sd = Fib_commSD_SD, log = FALSE)
Fib_commSD_norm <- as.data.frame(Fib_commSD_norm)
Fib_commSD_norm$Fib_comm_SD <- Fib_data$Fib_comm_SD
Fib_commSD_norm$Paper <- Fib_data$Paper

pdf(file = "Fib_commSD_norm.pdf")
plot(Fib_commSD_norm$Fib_comm_SD, Fib_commSD_norm$Fib_commSD_norm)
dev.off()

## exclude studies with Fib_comm_SD >1.5 or high contribution to heterogeneity on baujat plot

Fib_NoOutlier_data = subset(Fib_data, Fib_comm_SD <1.5)
Fib_NoOutlier_data <- Fib_NoOutlier_data %>% filter(Paper != "Imai 2017_1" & Paper != "Magdy 2017_1" & Paper != "Patel 2018_2" & Paper != "Kurita 2008_2")


#######


## re-rerun after outliers excluded


## drop where <3 unique studies for any drug class
Fib_NoOutlier_drugsclass_counts <- Fib_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
Fib_NoOutlier_class_counts <- Fib_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

Fib_NoOutlier_class_less3 = subset(Fib_NoOutlier_class_counts, n <3)
str(Fib_NoOutlier_class_less3)
Fib_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(Fib_NoOutlier_class_less3$Drug_Class_new_1_all)
Fib_NoOutlier_class_droplist <- Fib_NoOutlier_class_less3$Drug_Class_new_1_all

Fib_NoOutlier_data_min3class <- Fib_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% Fib_NoOutlier_class_droplist)


## run metan
Fib_NoOutlier_metan_class_main <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Fib_NoOutlier_metan_class <- update(Fib_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
Fib_NoOutlier_metan_class_tab <- data.frame(Fib_NoOutlier_metan_class[["TE.random.w"]])
Fib_NoOutlier_metan_class_tab$drug <- Fib_NoOutlier_metan_class[["bylevs"]]
Fib_NoOutlier_metan_class_tab$SE <- Fib_NoOutlier_metan_class[["seTE.random.w"]]
Fib_NoOutlier_metan_class_tab$lower <- Fib_NoOutlier_metan_class[["lower.random.w"]]
Fib_NoOutlier_metan_class_tab$upper <- Fib_NoOutlier_metan_class[["upper.random.w"]]
Fib_NoOutlier_metan_class_tab$Pz <- Fib_NoOutlier_metan_class[["pval.random.w"]]
Fib_NoOutlier_metan_class_tab$weight <- Fib_NoOutlier_metan_class[["w.random.w"]]
Fib_NoOutlier_metan_class_tab$k <- Fib_NoOutlier_metan_class[["k.w"]]
Fib_NoOutlier_metan_class_tab$controls <- Fib_NoOutlier_metan_class[["n.c.w"]]
Fib_NoOutlier_metan_class_tab$experimental <- Fib_NoOutlier_metan_class[["n.e.w"]]
Fib_NoOutlier_metan_class_tab$Q <- Fib_NoOutlier_metan_class[["Q.w"]]
Fib_NoOutlier_metan_class_tab$Pq <- Fib_NoOutlier_metan_class[["pval.Q.w"]]
Fib_NoOutlier_metan_class_tab$tau <- Fib_NoOutlier_metan_class[["tau.w"]]
Fib_NoOutlier_metan_class_tab$I2 <- Fib_NoOutlier_metan_class[["I2.w"]]
Fib_NoOutlier_metan_class_tab <- Fib_NoOutlier_metan_class_tab %>% rename(MD = Fib_NoOutlier_metan_class...TE.random.w...)
Fib_NoOutlier_metan_class_tab <- Fib_NoOutlier_metan_class_tab[order(-Fib_NoOutlier_metan_class_tab$MD),]
Fib_NoOutlier_metan_class_tab <- Fib_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n())
Fib_NoOutlier_metan_class_tab$subgroup <- "Subgroup"
Fib_NoOutlier_class_counts <- Fib_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all)
Fib_NoOutlier_metan_class_tab <- merge(Fib_NoOutlier_class_counts, Fib_NoOutlier_metan_class_tab, by="drug")

Fib_NoOutlier_metan_class_tab_overall <- data.frame(Fib_NoOutlier_metan_class[["TE.random"]])
Fib_NoOutlier_metan_class_tab_overall$drug <- "Overall"
Fib_NoOutlier_metan_class_tab_overall$SE <- Fib_NoOutlier_metan_class[["seTE.random"]]
Fib_NoOutlier_metan_class_tab_overall$lower <- Fib_NoOutlier_metan_class[["lower.random"]]
Fib_NoOutlier_metan_class_tab_overall$upper <- Fib_NoOutlier_metan_class[["upper.random"]]
Fib_NoOutlier_metan_class_tab_overall$Pz <- Fib_NoOutlier_metan_class[["pval.random"]]
Fib_NoOutlier_metan_class_tab_overall$weight <- (max(Fib_NoOutlier_metan_class_tab$weight)*2)
Fib_NoOutlier_metan_class_tab_overall$k <- Fib_NoOutlier_metan_class[["k"]]
Fib_NoOutlier_metan_class_tab_overall$controls <- sum(Fib_NoOutlier_metan_class_tab$controls)
Fib_NoOutlier_metan_class_tab_overall$experimental <- sum(Fib_NoOutlier_metan_class_tab$experimental)
Fib_NoOutlier_metan_class_tab_overall$Q <- Fib_NoOutlier_metan_class[["Q"]]
Fib_NoOutlier_metan_class_tab_overall$Pq <- Fib_NoOutlier_metan_class[["pval.Q"]]
Fib_NoOutlier_metan_class_tab_overall$tau <- Fib_NoOutlier_metan_class[["tau"]]
Fib_NoOutlier_metan_class_tab_overall$I2 <- Fib_NoOutlier_metan_class[["I2"]]
Fib_NoOutlier_metan_class_tab_overall <- Fib_NoOutlier_metan_class_tab_overall %>% rename(MD = Fib_NoOutlier_metan_class...TE.random...)
Fib_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(Fib_NoOutlier_metan_class_tab))+1)
Fib_NoOutlier_metan_class_tab_overall$subgroup <- "Overall"
Fib_NoOutlier_metan_class_tab_overall$n <- sum(Fib_NoOutlier_metan_class_tab$n)
Fib_NoOutlier_metan_class_sumtab <- rbind(Fib_NoOutlier_metan_class_tab, Fib_NoOutlier_metan_class_tab_overall)
Fib_NoOutlier_metan_class_sumtab$weight <- as.numeric(Fib_NoOutlier_metan_class_sumtab$weight)
Fib_NoOutlier_metan_class_sumtab$row_number <- as.numeric(Fib_NoOutlier_metan_class_sumtab$row_number)
Fib_NoOutlier_metan_class_sumtab$subgroup <- as.factor(Fib_NoOutlier_metan_class_sumtab$subgroup)
Fib_NoOutlier_metan_class_sumtab$total = Fib_NoOutlier_metan_class_sumtab$controls + Fib_NoOutlier_metan_class_sumtab$experimental

Fib_NoOutlier_metan_class_sumtab$text <- paste(format(round(Fib_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(Fib_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Fib_NoOutlier_metan_class_sumtab$text <- paste(Fib_NoOutlier_metan_class_sumtab$text, format(round(Fib_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Fib_NoOutlier_metan_class_sumtab$text <- paste(Fib_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

Fib_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(Fib_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Fib_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(Fib_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Fib_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(Fib_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Fib_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(Fib_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Fib_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(Fib_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Fib_NoOutlier_metan_class_sumtab,file="Fib_NoOutlier_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(Fib_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Fib_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Fib_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = Fib_NoOutlier_metan_class_tab_overall$lower
overall_max = Fib_NoOutlier_metan_class_tab_overall$upper

Fib_NoOutlier_metan_class_ybreaks <- nrow(Fib_NoOutlier_metan_class_sumtab)
Fib_NoOutlier_metan_class_sumtab <- Fib_NoOutlier_metan_class_sumtab[order(Fib_NoOutlier_metan_class_sumtab$row_number),]

Fib_NoOutlier_metan_class_forest <- ggplot(data= Fib_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Fib_NoOutlier_metan_class_ybreaks, labels = Fib_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in fibrosis stage") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.1, 1), breaks=seq(-1.5, .5, 0.5), expand=c(0,0)) + geom_text(data=Fib_NoOutlier_metan_class_sumtab, aes(x=.25, label=text), size = 3.5, hjust=0) + geom_text(data=Fib_NoOutlier_metan_class_sumtab, aes(x=-2, label=k), size = 3.5, hjust=0) + geom_text(data=Fib_NoOutlier_metan_class_sumtab, aes(x=-1.8, label=total), size = 3.5, hjust=0)

pdf(file="Fib_NoOutlier_metan_class_forest.pdf",width=9,height=3)
Fib_NoOutlier_metan_class_forest
dev.off()

#######

## re-run using sub-grouping by individual drugs



## drop where <3 unique studies for any drug class
Fib_drugIndiv_counts <- Fib_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n())
Fib_drugIndiv_sum_counts <- Fib_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n())

Fib_drugIndiv_less3 = subset(Fib_drugIndiv_sum_counts, n <3)
str(Fib_drugIndiv_less3)
Fib_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(Fib_drugIndiv_less3$Indiv_drug_class_3)
Fib_drugIndiv_droplist <- Fib_drugIndiv_less3$Indiv_drug_class_3

Fib_data_min3drug <- Fib_data %>% filter(!Indiv_drug_class_3 %in% Fib_drugIndiv_droplist)


## run metan
Fib_metan_drugIndiv <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Fib_metan_drugIndiv <- update(Fib_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug")

## make summary table of results
Fib_metan_drugIndiv_tab <- data.frame(Fib_metan_drugIndiv[["TE.random.w"]])
Fib_metan_drugIndiv_tab$drug <- Fib_metan_drugIndiv[["bylevs"]]
Fib_metan_drugIndiv_tab$SE <- Fib_metan_drugIndiv[["seTE.random.w"]]
Fib_metan_drugIndiv_tab$lower <- Fib_metan_drugIndiv[["lower.random.w"]]
Fib_metan_drugIndiv_tab$upper <- Fib_metan_drugIndiv[["upper.random.w"]]
Fib_metan_drugIndiv_tab$Pz <- Fib_metan_drugIndiv[["pval.random.w"]]
Fib_metan_drugIndiv_tab$weight <- Fib_metan_drugIndiv[["w.random.w"]]
Fib_metan_drugIndiv_tab$k <- Fib_metan_drugIndiv[["k.w"]]
Fib_metan_drugIndiv_tab$controls <- Fib_metan_drugIndiv[["n.c.w"]]
Fib_metan_drugIndiv_tab$experimental <- Fib_metan_drugIndiv[["n.e.w"]]
Fib_metan_drugIndiv_tab$Q <- Fib_metan_drugIndiv[["Q.w"]]
Fib_metan_drugIndiv_tab$Pq <- Fib_metan_drugIndiv[["pval.Q.w"]]
Fib_metan_drugIndiv_tab$tau <- Fib_metan_drugIndiv[["tau.w"]]
Fib_metan_drugIndiv_tab$I2 <- Fib_metan_drugIndiv[["I2.w"]]
Fib_metan_drugIndiv_tab <- Fib_metan_drugIndiv_tab %>% rename(MD = Fib_metan_drugIndiv...TE.random.w...)
Fib_metan_drugIndiv_tab <- Fib_metan_drugIndiv_tab[order(-Fib_metan_drugIndiv_tab$MD),]
Fib_metan_drugIndiv_tab <- Fib_metan_drugIndiv_tab %>% mutate(row_number= 1:n())
Fib_metan_drugIndiv_tab$subgroup <- "Subgroup"
Fib_drugIndiv_sum_counts <- Fib_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3)
Fib_metan_drugIndiv_tab <- merge(Fib_drugIndiv_sum_counts, Fib_metan_drugIndiv_tab, by="drug")

Fib_metan_drugIndiv_tab_overall <- data.frame(Fib_metan_drugIndiv[["TE.random"]])
Fib_metan_drugIndiv_tab_overall$drug <- "Overall"
Fib_metan_drugIndiv_tab_overall$SE <- Fib_metan_drugIndiv[["seTE.random"]]
Fib_metan_drugIndiv_tab_overall$lower <- Fib_metan_drugIndiv[["lower.random"]]
Fib_metan_drugIndiv_tab_overall$upper <- Fib_metan_drugIndiv[["upper.random"]]
Fib_metan_drugIndiv_tab_overall$Pz <- Fib_metan_drugIndiv[["pval.random"]]
Fib_metan_drugIndiv_tab_overall$weight <- (max(Fib_metan_drugIndiv_tab$weight)*2)
Fib_metan_drugIndiv_tab_overall$k <- Fib_metan_drugIndiv[["k"]]
Fib_metan_drugIndiv_tab_overall$controls <- sum(Fib_metan_drugIndiv_tab$controls)
Fib_metan_drugIndiv_tab_overall$experimental <- sum(Fib_metan_drugIndiv_tab$experimental)
Fib_metan_drugIndiv_tab_overall$Q <- Fib_metan_drugIndiv[["Q"]]
Fib_metan_drugIndiv_tab_overall$Pq <- Fib_metan_drugIndiv[["pval.Q"]]
Fib_metan_drugIndiv_tab_overall$tau <- Fib_metan_drugIndiv[["tau"]]
Fib_metan_drugIndiv_tab_overall$I2 <- Fib_metan_drugIndiv[["I2"]]
Fib_metan_drugIndiv_tab_overall <- Fib_metan_drugIndiv_tab_overall %>% rename(MD = Fib_metan_drugIndiv...TE.random...)
Fib_metan_drugIndiv_tab_overall$row_number <- ((nrow(Fib_metan_drugIndiv_tab))+1)
Fib_metan_drugIndiv_tab_overall$subgroup <- "Overall"
Fib_metan_drugIndiv_tab_overall$n <- sum(Fib_metan_drugIndiv_tab$n)
Fib_metan_drugIndiv_sumtab <- rbind(Fib_metan_drugIndiv_tab, Fib_metan_drugIndiv_tab_overall)
Fib_metan_drugIndiv_sumtab$weight <- as.numeric(Fib_metan_drugIndiv_sumtab$weight)
Fib_metan_drugIndiv_sumtab$row_number <- as.numeric(Fib_metan_drugIndiv_sumtab$row_number)
Fib_metan_drugIndiv_sumtab$subgroup <- as.factor(Fib_metan_drugIndiv_sumtab$subgroup)
Fib_metan_drugIndiv_sumtab$total = Fib_metan_drugIndiv_sumtab$controls + Fib_metan_drugIndiv_sumtab$experimental

Fib_metan_drugIndiv_sumtab$text <- paste(format(round(Fib_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(Fib_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
Fib_metan_drugIndiv_sumtab$text <- paste(Fib_metan_drugIndiv_sumtab$text, format(round(Fib_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
Fib_metan_drugIndiv_sumtab$text <- paste(Fib_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL)

Fib_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(Fib_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
Fib_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(Fib_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
Fib_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(Fib_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
Fib_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(Fib_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
Fib_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(Fib_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(Fib_metan_drugIndiv_sumtab,file="Fib_metan_drugIndiv_sumtab.csv",sep=",")

## make forest plot

label_bold <- ifelse(Fib_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(Fib_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(Fib_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10")

overall_min = Fib_metan_drugIndiv_tab_overall$lower
overall_max = Fib_metan_drugIndiv_tab_overall$upper

Fib_metan_drugIndiv_ybreaks <- nrow(Fib_metan_drugIndiv_sumtab)
Fib_metan_drugIndiv_sumtab <- Fib_metan_drugIndiv_sumtab[order(Fib_metan_drugIndiv_sumtab$row_number),]

Fib_metan_drugIndiv_forest <- ggplot(data= Fib_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: Fib_metan_drugIndiv_ybreaks, labels = Fib_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in lobular inflammation") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + scale_x_continuous(limits=c(-2.7, 1), breaks=seq(-2, .5, 0.5), expand=c(0,0)) + geom_text(data=Fib_metan_drugIndiv_sumtab, aes(x=.2, label=text), size = 3.5, hjust=0) + geom_text(data=Fib_metan_drugIndiv_sumtab, aes(x=-2.5, label=k), size = 3.5, hjust=0) + geom_text(data=Fib_metan_drugIndiv_sumtab, aes(x=-2.2, label=total), size = 3.5, hjust=0)

pdf(file="Fib_metan_drugIndiv_forest.pdf",width=9,height=3)
Fib_metan_drugIndiv_forest
dev.off()


########

## calculate sample size needed for average results
## mean comm_SD = Fib_commSD_mean
## meta-analysis mean difference = Fib_metan_class_main[["TE.random"]]
## calculate Cohen's d
Fib_cohen_d = Fib_metan_class_main[["TE.random"]] / Fib_commSD_mean

Fib_samplesize_av <- pwr.t.test(d = Fib_cohen_d, power = 0.80, sig.level = 0.05)
## n = 16 - number in **each** group

## find number of studies with n > Fib_samplesize_av

Fib_data$total = Fib_data$Fib_Int_size + Fib_data$Fib_Pla_size

Fib_pwrcount <- Fib_data %>% group_by(total, Paper) %>% summarise(n = n())

Fib_pwrcount_adequate = subset(Fib_pwrcount, total >= 2*(Fib_samplesize_av[["n"]]))
write.table(Fib_pwrcount_adequate,file="Fib_pwrcount_adequate.csv",sep=",")

########

## run meta-regressions on full Fib dataset for continuous traits

Fib_metan_full <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## create metan with >3 for each level of categorical variables

## Background

Fib_bg_counts <- Fib_data %>% group_by(Background_simple, Study) %>% summarise(n = n())
Fib_bg_counts_sum <- Fib_bg_counts %>% group_by(Background_simple) %>% summarise(n = n())

Fib_bg_less3 = subset(Fib_bg_counts_sum, n <3)
Fib_bg_less3$Background_simple <- droplevels(Fib_bg_less3$Background_simple)
Fib_bg_droplist <- Fib_bg_less3$Background_simple

Fib_data_min3bg <- Fib_data %>% filter(!Background_simple %in% Fib_bg_droplist)

Fib_metan_bg <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## Model 

Fib_model_counts <- Fib_data %>% group_by(Model_simple, Study) %>% summarise(n = n())
Fib_model_counts_sum <- Fib_model_counts %>% group_by(Model_simple) %>% summarise(n = n())

Fib_model_less3 = subset(Fib_model_counts_sum, n <3)
Fib_model_less3$Model_simple <- droplevels(Fib_model_less3$Model_simple)
Fib_model_droplist <- Fib_model_less3$Model_simple

Fib_data_min3model <- Fib_data %>% filter(!Model_simple %in% Fib_model_droplist)

Fib_metan_model <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## run metaregs

Fib_reg_Qual_score <- metareg(Fib_metan_full, Qual_score)
Fib_reg_Qual_score_tab <- data.frame(Fib_reg_Qual_score[["beta"]])
Fib_reg_Qual_score_tab$se <- Fib_reg_Qual_score[["se"]]
Fib_reg_Qual_score_tab$pval <- Fib_reg_Qual_score[["pval"]]
Fib_reg_Qual_score_tab$beta <- Fib_reg_Qual_score[["beta"]]
Fib_reg_Qual_score_tab <- Fib_reg_Qual_score_tab[-c(1),]
Fib_reg_Qual_score_tab <- Fib_reg_Qual_score_tab[-c(1)]
Fib_reg_Qual_score_tab$k <- Fib_reg_Qual_score[["k"]]
Fib_reg_Qual_score_tab$r2 <- Fib_reg_Qual_score[["R2"]]
Fib_reg_Qual_score_tab$var <- "Qual_score"

Fib_reg_Protocol <- metareg(Fib_metan_full, Protocol)
Fib_reg_Protocol_tab <- data.frame(Fib_reg_Protocol[["beta"]])
Fib_reg_Protocol_tab$se <- Fib_reg_Protocol[["se"]]
Fib_reg_Protocol_tab$pval <- Fib_reg_Protocol[["pval"]]
Fib_reg_Protocol_tab$beta <- Fib_reg_Protocol[["beta"]]
Fib_reg_Protocol_tab <- Fib_reg_Protocol_tab[-c(1),]
Fib_reg_Protocol_tab <- Fib_reg_Protocol_tab[-c(1)]
Fib_reg_Protocol_tab$k <- Fib_reg_Protocol[["k"]]
Fib_reg_Protocol_tab$r2 <- Fib_reg_Protocol[["R2"]]
Fib_reg_Protocol_tab$var <- "Protocol"

Fib_reg_Randomisation <- metareg(Fib_metan_full, Randomisation)
Fib_reg_Randomisation_tab <- data.frame(Fib_reg_Randomisation[["beta"]])
Fib_reg_Randomisation_tab$se <- Fib_reg_Randomisation[["se"]]
Fib_reg_Randomisation_tab$pval <- Fib_reg_Randomisation[["pval"]]
Fib_reg_Randomisation_tab$beta <- Fib_reg_Randomisation[["beta"]]
Fib_reg_Randomisation_tab <- Fib_reg_Randomisation_tab[-c(1),]
Fib_reg_Randomisation_tab <- Fib_reg_Randomisation_tab[-c(1)]
Fib_reg_Randomisation_tab$k <- Fib_reg_Randomisation[["k"]]
Fib_reg_Randomisation_tab$r2 <- Fib_reg_Randomisation[["R2"]]
Fib_reg_Randomisation_tab$var <- "Randomisation"

Fib_reg_Blinding <- metareg(Fib_metan_full, Blinding)
Fib_reg_Blinding_tab <- data.frame(Fib_reg_Blinding[["beta"]])
Fib_reg_Blinding_tab$se <- Fib_reg_Blinding[["se"]]
Fib_reg_Blinding_tab$pval <- Fib_reg_Blinding[["pval"]]
Fib_reg_Blinding_tab$beta <- Fib_reg_Blinding[["beta"]]
Fib_reg_Blinding_tab <- Fib_reg_Blinding_tab[-c(1),]
Fib_reg_Blinding_tab <- Fib_reg_Blinding_tab[-c(1)]
Fib_reg_Blinding_tab$k <- Fib_reg_Blinding[["k"]]
Fib_reg_Blinding_tab$r2 <- Fib_reg_Blinding[["R2"]]
Fib_reg_Blinding_tab$var <- "Blinding"

Fib_reg_Power_calculation <- metareg(Fib_metan_full, Power_calculation)
Fib_reg_Power_calculation_tab <- data.frame(Fib_reg_Power_calculation[["beta"]])
Fib_reg_Power_calculation_tab$se <- Fib_reg_Power_calculation[["se"]]
Fib_reg_Power_calculation_tab$pval <- Fib_reg_Power_calculation[["pval"]]
Fib_reg_Power_calculation_tab$beta <- Fib_reg_Power_calculation[["beta"]]
Fib_reg_Power_calculation_tab <- Fib_reg_Power_calculation_tab[-c(1),]
Fib_reg_Power_calculation_tab <- Fib_reg_Power_calculation_tab[-c(1)]
Fib_reg_Power_calculation_tab$k <- Fib_reg_Power_calculation[["k"]]
Fib_reg_Power_calculation_tab$r2 <- Fib_reg_Power_calculation[["R2"]]
Fib_reg_Power_calculation_tab$var <- "Power_calculation"

Fib_reg_Chol_per <- metareg(Fib_metan_full, Chol_per)
Fib_reg_Chol_per_tab <- data.frame(Fib_reg_Chol_per[["beta"]])
Fib_reg_Chol_per_tab$se <- Fib_reg_Chol_per[["se"]]
Fib_reg_Chol_per_tab$pval <- Fib_reg_Chol_per[["pval"]]
Fib_reg_Chol_per_tab$beta <- Fib_reg_Chol_per[["beta"]]
Fib_reg_Chol_per_tab <- Fib_reg_Chol_per_tab[-c(1),]
Fib_reg_Chol_per_tab <- Fib_reg_Chol_per_tab[-c(1)]
Fib_reg_Chol_per_tab$k <- Fib_reg_Chol_per[["k"]]
Fib_reg_Chol_per_tab$r2 <- Fib_reg_Chol_per[["R2"]]
Fib_reg_Chol_per_tab$var <- "Chol_per"

Fib_reg_log_FructGluc_per <- metareg(Fib_metan_full, log_FructGluc_per)
Fib_reg_log_FructGluc_per_tab <- data.frame(Fib_reg_log_FructGluc_per[["beta"]])
Fib_reg_log_FructGluc_per_tab$se <- Fib_reg_log_FructGluc_per[["se"]]
Fib_reg_log_FructGluc_per_tab$pval <- Fib_reg_log_FructGluc_per[["pval"]]
Fib_reg_log_FructGluc_per_tab$beta <- Fib_reg_log_FructGluc_per[["beta"]]
Fib_reg_log_FructGluc_per_tab <- Fib_reg_log_FructGluc_per_tab[-c(1),]
Fib_reg_log_FructGluc_per_tab <- Fib_reg_log_FructGluc_per_tab[-c(1)]
Fib_reg_log_FructGluc_per_tab$k <- Fib_reg_log_FructGluc_per[["k"]]
Fib_reg_log_FructGluc_per_tab$r2 <- Fib_reg_log_FructGluc_per[["R2"]]
Fib_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per"

Fib_reg_log_Sucr_kcal <- metareg(Fib_metan_full, log_Sucr_kcal)
Fib_reg_log_Sucr_kcal_tab <- data.frame(Fib_reg_log_Sucr_kcal[["beta"]])
Fib_reg_log_Sucr_kcal_tab$se <- Fib_reg_log_Sucr_kcal[["se"]]
Fib_reg_log_Sucr_kcal_tab$pval <- Fib_reg_log_Sucr_kcal[["pval"]]
Fib_reg_log_Sucr_kcal_tab$beta <- Fib_reg_log_Sucr_kcal[["beta"]]
Fib_reg_log_Sucr_kcal_tab <- Fib_reg_log_Sucr_kcal_tab[-c(1),]
Fib_reg_log_Sucr_kcal_tab <- Fib_reg_log_Sucr_kcal_tab[-c(1)]
Fib_reg_log_Sucr_kcal_tab$k <- Fib_reg_log_Sucr_kcal[["k"]]
Fib_reg_log_Sucr_kcal_tab$r2 <- Fib_reg_log_Sucr_kcal[["R2"]]
Fib_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal"

Fib_reg_log_Fat_kcal <- metareg(Fib_metan_full, log_Fat_kcal)
Fib_reg_log_Fat_kcal_tab <- data.frame(Fib_reg_log_Fat_kcal[["beta"]])
Fib_reg_log_Fat_kcal_tab$se <- Fib_reg_log_Fat_kcal[["se"]]
Fib_reg_log_Fat_kcal_tab$pval <- Fib_reg_log_Fat_kcal[["pval"]]
Fib_reg_log_Fat_kcal_tab$beta <- Fib_reg_log_Fat_kcal[["beta"]]
Fib_reg_log_Fat_kcal_tab <- Fib_reg_log_Fat_kcal_tab[-c(1),]
Fib_reg_log_Fat_kcal_tab <- Fib_reg_log_Fat_kcal_tab[-c(1)]
Fib_reg_log_Fat_kcal_tab$k <- Fib_reg_log_Fat_kcal[["k"]]
Fib_reg_log_Fat_kcal_tab$r2 <- Fib_reg_log_Fat_kcal[["R2"]]
Fib_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal"

Fib_reg_log_Age_start <- metareg(Fib_metan_full, log_Age_start)
Fib_reg_log_Age_start_tab <- data.frame(Fib_reg_log_Age_start[["beta"]])
Fib_reg_log_Age_start_tab$se <- Fib_reg_log_Age_start[["se"]]
Fib_reg_log_Age_start_tab$pval <- Fib_reg_log_Age_start[["pval"]]
Fib_reg_log_Age_start_tab$beta <- Fib_reg_log_Age_start[["beta"]]
Fib_reg_log_Age_start_tab <- Fib_reg_log_Age_start_tab[-c(1),]
Fib_reg_log_Age_start_tab <- Fib_reg_log_Age_start_tab[-c(1)]
Fib_reg_log_Age_start_tab$k <- Fib_reg_log_Age_start[["k"]]
Fib_reg_log_Age_start_tab$r2 <- Fib_reg_log_Age_start[["R2"]]
Fib_reg_log_Age_start_tab$var <- "log_Age_start"

Fib_reg_log_Duration <- metareg(Fib_metan_full, log_Duration)
Fib_reg_log_Duration_tab <- data.frame(Fib_reg_log_Duration[["beta"]])
Fib_reg_log_Duration_tab$se <- Fib_reg_log_Duration[["se"]]
Fib_reg_log_Duration_tab$pval <- Fib_reg_log_Duration[["pval"]]
Fib_reg_log_Duration_tab$beta <- Fib_reg_log_Duration[["beta"]]
Fib_reg_log_Duration_tab <- Fib_reg_log_Duration_tab[-c(1),]
Fib_reg_log_Duration_tab <- Fib_reg_log_Duration_tab[-c(1)]
Fib_reg_log_Duration_tab$k <- Fib_reg_log_Duration[["k"]]
Fib_reg_log_Duration_tab$r2 <- Fib_reg_log_Duration[["R2"]]
Fib_reg_log_Duration_tab$var <- "log_Duration"

Fib_reg_log_Age_end <- metareg(Fib_metan_full, log_Age_end)
Fib_reg_log_Age_end_tab <- data.frame(Fib_reg_log_Age_end[["beta"]])
Fib_reg_log_Age_end_tab$se <- Fib_reg_log_Age_end[["se"]]
Fib_reg_log_Age_end_tab$pval <- Fib_reg_log_Age_end[["pval"]]
Fib_reg_log_Age_end_tab$beta <- Fib_reg_log_Age_end[["beta"]]
Fib_reg_log_Age_end_tab <- Fib_reg_log_Age_end_tab[-c(1),]
Fib_reg_log_Age_end_tab <- Fib_reg_log_Age_end_tab[-c(1)]
Fib_reg_log_Age_end_tab$k <- Fib_reg_log_Age_end[["k"]]
Fib_reg_log_Age_end_tab$r2 <- Fib_reg_log_Age_end[["R2"]]
Fib_reg_log_Age_end_tab$var <- "log_Age_end"

Fib_reg_log_Wt_change <- metareg(Fib_metan_full, log_Wt_change)
Fib_reg_log_Wt_change_tab <- data.frame(Fib_reg_log_Wt_change[["beta"]])
Fib_reg_log_Wt_change_tab$se <- Fib_reg_log_Wt_change[["se"]]
Fib_reg_log_Wt_change_tab$pval <- Fib_reg_log_Wt_change[["pval"]]
Fib_reg_log_Wt_change_tab$beta <- Fib_reg_log_Wt_change[["beta"]]
Fib_reg_log_Wt_change_tab <- Fib_reg_log_Wt_change_tab[-c(1),]
Fib_reg_log_Wt_change_tab <- Fib_reg_log_Wt_change_tab[-c(1)]
Fib_reg_log_Wt_change_tab$k <- Fib_reg_log_Wt_change[["k"]]
Fib_reg_log_Wt_change_tab$r2 <- Fib_reg_log_Wt_change[["R2"]]
Fib_reg_log_Wt_change_tab$var <- "log_Wt_change"

Fib_reg_log_Gluc_change <- metareg(Fib_metan_full, log_Gluc_change)
Fib_reg_log_Gluc_change_tab <- data.frame(Fib_reg_log_Gluc_change[["beta"]])
Fib_reg_log_Gluc_change_tab$se <- Fib_reg_log_Gluc_change[["se"]]
Fib_reg_log_Gluc_change_tab$pval <- Fib_reg_log_Gluc_change[["pval"]]
Fib_reg_log_Gluc_change_tab$beta <- Fib_reg_log_Gluc_change[["beta"]]
Fib_reg_log_Gluc_change_tab <- Fib_reg_log_Gluc_change_tab[-c(1),]
Fib_reg_log_Gluc_change_tab <- Fib_reg_log_Gluc_change_tab[-c(1)]
Fib_reg_log_Gluc_change_tab$k <- Fib_reg_log_Gluc_change[["k"]]
Fib_reg_log_Gluc_change_tab$r2 <- Fib_reg_log_Gluc_change[["R2"]]
Fib_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

Fib_reg_log_Insul_change <- metareg(Fib_metan_full, log_Insul_change)
Fib_reg_log_Insul_change_tab <- data.frame(Fib_reg_log_Insul_change[["beta"]])
Fib_reg_log_Insul_change_tab$se <- Fib_reg_log_Insul_change[["se"]]
Fib_reg_log_Insul_change_tab$pval <- Fib_reg_log_Insul_change[["pval"]]
Fib_reg_log_Insul_change_tab$beta <- Fib_reg_log_Insul_change[["beta"]]
Fib_reg_log_Insul_change_tab <- Fib_reg_log_Insul_change_tab[-c(1),]
Fib_reg_log_Insul_change_tab <- Fib_reg_log_Insul_change_tab[-c(1)]
Fib_reg_log_Insul_change_tab$k <- Fib_reg_log_Insul_change[["k"]]
Fib_reg_log_Insul_change_tab$r2 <- Fib_reg_log_Insul_change[["R2"]]
Fib_reg_log_Insul_change_tab$var <- "log_Insul_change"

Fib_reg_Sex <- metareg(Fib_metan_full, Sex)
Fib_reg_Sex_tab <- data.frame(Fib_reg_Sex[["beta"]])
Fib_reg_Sex_tab$se <- Fib_reg_Sex[["se"]]
Fib_reg_Sex_tab$pval <- Fib_reg_Sex[["pval"]]
Fib_reg_Sex_tab$beta <- Fib_reg_Sex[["beta"]]
Fib_reg_Sex_tab <- Fib_reg_Sex_tab[-c(1),]
Fib_reg_Sex_tab <- Fib_reg_Sex_tab[-c(1)]
Fib_reg_Sex_tab$k <- Fib_reg_Sex[["k"]]
Fib_reg_Sex_tab$r2 <- NA
Fib_reg_Sex_tab$var <- rownames(Fib_reg_Sex_tab)
Fib_reg_Sex_overall_tab <- data.frame(Fib_reg_Sex[["QMp"]])
Fib_reg_Sex_overall_tab$se <- NA
Fib_reg_Sex_overall_tab$pval <- Fib_reg_Sex[["QMp"]]
Fib_reg_Sex_overall_tab$beta <- NA
Fib_reg_Sex_overall_tab <- Fib_reg_Sex_overall_tab[-c(1)]
Fib_reg_Sex_overall_tab$k <- Fib_reg_Sex[["k"]]
Fib_reg_Sex_overall_tab$r2 <- Fib_reg_Sex[["R2"]]
Fib_reg_Sex_overall_tab$var <- "Sex_overall"
Fib_reg_Sex_tab <- rbind(Fib_reg_Sex_tab, Fib_reg_Sex_overall_tab)

Fib_reg_Drug_dose <- metareg(Fib_metan_drugIndiv, Drug_dose)
Fib_reg_Drug_dose_tab <- data.frame(Fib_reg_Drug_dose[["beta"]])
Fib_reg_Drug_dose_tab$se <- Fib_reg_Drug_dose[["se"]]
Fib_reg_Drug_dose_tab$pval <- Fib_reg_Drug_dose[["pval"]]
Fib_reg_Drug_dose_tab$beta <- Fib_reg_Drug_dose[["beta"]]
Fib_reg_Drug_dose_tab <- Fib_reg_Drug_dose_tab[-c(1),]
Fib_reg_Drug_dose_tab <- Fib_reg_Drug_dose_tab[-c(1)]
Fib_reg_Drug_dose_tab$k <- Fib_reg_Drug_dose[["k"]]
Fib_reg_Drug_dose_tab$r2 <- Fib_reg_Drug_dose[["R2"]]
Fib_reg_Drug_dose_tab$var <- "Drug_dose"

Fib_reg_Indiv_drug_class_3 <- metareg(Fib_metan_drugIndiv, Indiv_drug_class_3)
Fib_reg_Indiv_drug_class_3_tab <- data.frame(Fib_reg_Indiv_drug_class_3[["beta"]])
Fib_reg_Indiv_drug_class_3_tab$se <- Fib_reg_Indiv_drug_class_3[["se"]]
Fib_reg_Indiv_drug_class_3_tab$pval <- Fib_reg_Indiv_drug_class_3[["pval"]]
Fib_reg_Indiv_drug_class_3_tab$beta <- Fib_reg_Indiv_drug_class_3[["beta"]]
Fib_reg_Indiv_drug_class_3_tab <- Fib_reg_Indiv_drug_class_3_tab[-c(1),]
Fib_reg_Indiv_drug_class_3_tab <- Fib_reg_Indiv_drug_class_3_tab[-c(1)]
Fib_reg_Indiv_drug_class_3_tab$k <- Fib_reg_Indiv_drug_class_3[["k"]]
Fib_reg_Indiv_drug_class_3_tab$r2 <- NA
Fib_reg_Indiv_drug_class_3_tab$var <- rownames(Fib_reg_Indiv_drug_class_3_tab)
Fib_reg_Indiv_drug_class_3_overall_tab <- data.frame(Fib_reg_Indiv_drug_class_3[["QMp"]])
Fib_reg_Indiv_drug_class_3_overall_tab$se <- NA
Fib_reg_Indiv_drug_class_3_overall_tab$pval <- Fib_reg_Indiv_drug_class_3[["QMp"]]
Fib_reg_Indiv_drug_class_3_overall_tab$beta <- NA
Fib_reg_Indiv_drug_class_3_overall_tab <- Fib_reg_Indiv_drug_class_3_overall_tab[-c(1)]
Fib_reg_Indiv_drug_class_3_overall_tab$k <- Fib_reg_Indiv_drug_class_3[["k"]]
Fib_reg_Indiv_drug_class_3_overall_tab$r2 <- Fib_reg_Indiv_drug_class_3[["R2"]]
Fib_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall"
Fib_reg_Indiv_drug_class_3_tab <- rbind(Fib_reg_Indiv_drug_class_3_tab, Fib_reg_Indiv_drug_class_3_overall_tab)

Fib_reg_Model_simple <- metareg(Fib_metan_model, Model_simple)
Fib_reg_Model_simple_tab <- data.frame(Fib_reg_Model_simple[["beta"]])
Fib_reg_Model_simple_tab$se <- Fib_reg_Model_simple[["se"]]
Fib_reg_Model_simple_tab$pval <- Fib_reg_Model_simple[["pval"]]
Fib_reg_Model_simple_tab$beta <- Fib_reg_Model_simple[["beta"]]
Fib_reg_Model_simple_tab <- Fib_reg_Model_simple_tab[-c(1),]
Fib_reg_Model_simple_tab <- Fib_reg_Model_simple_tab[-c(1)]
Fib_reg_Model_simple_tab$k <- Fib_reg_Model_simple[["k"]]
Fib_reg_Model_simple_tab$r2 <- NA
Fib_reg_Model_simple_tab$var <- rownames(Fib_reg_Model_simple_tab)
Fib_reg_Model_simple_overall_tab <- data.frame(Fib_reg_Model_simple[["QMp"]])
Fib_reg_Model_simple_overall_tab$se <- NA
Fib_reg_Model_simple_overall_tab$pval <- Fib_reg_Model_simple[["QMp"]]
Fib_reg_Model_simple_overall_tab$beta <- NA
Fib_reg_Model_simple_overall_tab <- Fib_reg_Model_simple_overall_tab[-c(1)]
Fib_reg_Model_simple_overall_tab$k <- Fib_reg_Model_simple[["k"]]
Fib_reg_Model_simple_overall_tab$r2 <- Fib_reg_Model_simple[["R2"]]
Fib_reg_Model_simple_overall_tab$var <- "Model_simple_overall"
Fib_reg_Model_simple_tab <- rbind(Fib_reg_Model_simple_tab, Fib_reg_Model_simple_overall_tab)

Fib_reg_Background_simple <- metareg(Fib_metan_bg, Background_simple)
Fib_reg_Background_simple_tab <- data.frame(Fib_reg_Background_simple[["beta"]])
Fib_reg_Background_simple_tab$se <- Fib_reg_Background_simple[["se"]]
Fib_reg_Background_simple_tab$pval <- Fib_reg_Background_simple[["pval"]]
Fib_reg_Background_simple_tab$beta <- Fib_reg_Background_simple[["beta"]]
Fib_reg_Background_simple_tab <- Fib_reg_Background_simple_tab[-c(1),]
Fib_reg_Background_simple_tab <- Fib_reg_Background_simple_tab[-c(1)]
Fib_reg_Background_simple_tab$k <- Fib_reg_Background_simple[["k"]]
Fib_reg_Background_simple_tab$r2 <- NA
Fib_reg_Background_simple_tab$var <- rownames(Fib_reg_Background_simple_tab)
Fib_reg_Background_simple_overall_tab <- data.frame(Fib_reg_Background_simple[["QMp"]])
Fib_reg_Background_simple_overall_tab$se <- NA
Fib_reg_Background_simple_overall_tab$pval <- Fib_reg_Background_simple[["QMp"]]
Fib_reg_Background_simple_overall_tab$beta <- NA
Fib_reg_Background_simple_overall_tab <- Fib_reg_Background_simple_overall_tab[-c(1)]
Fib_reg_Background_simple_overall_tab$k <- Fib_reg_Background_simple[["k"]]
Fib_reg_Background_simple_overall_tab$r2 <- Fib_reg_Background_simple[["R2"]]
Fib_reg_Background_simple_overall_tab$var <- "Background_simple_overall"
Fib_reg_Background_simple_tab <- rbind(Fib_reg_Background_simple_tab, Fib_reg_Background_simple_overall_tab)

Fib_metareg_sumtab <- rbind(Fib_reg_Qual_score_tab, Fib_reg_Protocol_tab, Fib_reg_Randomisation_tab, Fib_reg_Blinding_tab, Fib_reg_Power_calculation_tab, Fib_reg_Chol_per_tab, Fib_reg_log_FructGluc_per_tab, Fib_reg_log_Sucr_kcal_tab, Fib_reg_log_Fat_kcal_tab, Fib_reg_log_Age_start_tab, Fib_reg_log_Duration_tab, Fib_reg_log_Age_end_tab, Fib_reg_log_Wt_change_tab, Fib_reg_log_Gluc_change_tab, Fib_reg_log_Insul_change_tab, Fib_reg_Sex_tab, Fib_reg_Drug_dose_tab, Fib_reg_Indiv_drug_class_3_tab, Fib_reg_Model_simple_tab, Fib_reg_Background_simple_tab)

Fib_metareg_sumtab$text <- paste(format(round(Fib_metareg_sumtab$beta, 1), nsmall = 1), format(round(Fib_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Fib_metareg_sumtab$text <- paste(Fib_metareg_sumtab$text, "", sep = ")", collapse = NULL)
Fib_metareg_sumtab$pval_2dig <- paste((signif(Fib_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
Fib_metareg_sumtab$r2_2dig <- paste(format(round(Fib_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(Fib_metareg_sumtab,file="Fib_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="Fib_bubble_Wt_change.pdf",width=6,height=6)
Fib_bubble_Wt_change <- bubble(Fib_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in fibrosis stage", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
Fib_bubble_Wt_change
dev.off()

##########

##### run multiple meta-regression

## insufficient data to create a subset

## Run metan

Fib_multimetareg_metan <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")


library(metafor)

Fib_multmetareg_tab <- data.frame(Fib_multimetareg_metan$studlab)
Fib_multmetareg_tab$yi <- Fib_multimetareg_metan[["TE"]]
Fib_multmetareg_tab$sei <- Fib_multimetareg_metan[["seTE"]]
Fib_multmetareg_tab$Model_simple <- Fib_multimetareg_metan[["data"]][["Model_simple"]]
Fib_multmetareg_tab$Background_simple <- Fib_multimetareg_metan[["data"]][["Background_simple"]]
Fib_multmetareg_tab$Sex <- Fib_multimetareg_metan[["data"]][["Sex"]]
Fib_multmetareg_tab$Indiv_drug_class_3 <- Fib_multimetareg_metan[["data"]][["Indiv_drug_class_3"]]
Fib_multmetareg_tab$log_Fat_kcal <- Fib_multimetareg_metan[["data"]][["log_Fat_kcal"]]
Fib_multmetareg_tab$log_Age_start <- Fib_multimetareg_metan[["data"]][["log_Age_start"]]
Fib_multmetareg_tab$log_Age_end <- Fib_multimetareg_metan[["data"]][["log_Age_end"]]
Fib_multmetareg_tab$log_Duration <- Fib_multimetareg_metan[["data"]][["log_Duration"]]
Fib_multmetareg_tab$log_Wt_change <- Fib_multimetareg_metan[["data"]][["log_Wt_change"]]
Fib_multmetareg_tab$log_Gluc_change <- Fib_multimetareg_metan[["data"]][["log_Gluc_change"]]
Fib_multmetareg_tab$log_Insul_change <- Fib_multimetareg_metan[["data"]][["log_Insul_change"]]
Fib_multmetareg_tab$Qual_score <- Fib_multimetareg_metan[["data"]][["Qual_score"]]

Fib_multmetareg_tab_cor <- cor(Fib_multmetareg_tab[,8:15], use="complete.obs")
Fib_multmetareg_tab_cor

library(PerformanceAnalytics)
chart.Correlation(Fib_multmetareg_tab[,8:15], use="complete.obs")

## high correlation between age_start and age_end therefore drop age_end from model

## also have to drop insulin change due to insufficient data

library(dmetar)

Fib_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = Fib_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE)
Fib_multi_intereference1

sink("Fib_multi_intereference1.txt")
print(Fib_multi_intereference1)
sink()

## run multi-metareg for top model 1

Fib_multmetareg_1 <- rma(yi = yi, sei = sei, data = Fib_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + Qual_score + log_Wt_change + log_Gluc_change + log_Duration + Model_simple + log_Age_start, test="knha")

Fib_multmetareg_1_tab <- coef(summary(Fib_multmetareg_1))
Fib_multmetareg_1_tab$rownames <- rownames(Fib_multmetareg_1_tab)

Fib_multmetareg_1_tab$mod1_text <- paste(format(round(Fib_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(Fib_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Fib_multmetareg_1_tab$mod1_text <- paste(Fib_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL)
Fib_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(Fib_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL)

## check robustness using permutation test

Fib_multmetareg_1_permut <- permutest(Fib_multmetareg_1)

sink("Fib_multmetareg_1_permut.txt")
print(Fib_multmetareg_1_permut)
sink()


## insufficient data to repeat multiple meta-reg using individual drugs in addition to other variables

Fib_multmetareg_sumtab <- Fib_multmetareg_1_tab
write.table(Fib_multmetareg_sumtab, "Fib_multmetareg_sumtab.csv", sep=",")


## See if meta-regression results change after removal of weight-loss diets

library(tidyverse)

Fib_NoWtLoss_data <- Fib_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD')


Fib_NoWtLoss_metan_full <- metacont(Fib_Int_size, Fib_Int_Mean, Fib_Int_SD, Fib_Pla_size, Fib_Pla_Mean, Fib_Pla_SD, data = Fib_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

Fib_NoWtLoss_reg_log_Wt_change <- metareg(Fib_NoWtLoss_metan_full, log_Wt_change)
Fib_NoWtLoss_reg_log_Wt_change_tab <- data.frame(Fib_NoWtLoss_reg_log_Wt_change[["beta"]])
Fib_NoWtLoss_reg_log_Wt_change_tab$se <- Fib_NoWtLoss_reg_log_Wt_change[["se"]]
Fib_NoWtLoss_reg_log_Wt_change_tab$pval <- Fib_NoWtLoss_reg_log_Wt_change[["pval"]]
Fib_NoWtLoss_reg_log_Wt_change_tab$beta <- Fib_NoWtLoss_reg_log_Wt_change[["beta"]]
Fib_NoWtLoss_reg_log_Wt_change_tab <- Fib_NoWtLoss_reg_log_Wt_change_tab[-c(1),]
Fib_NoWtLoss_reg_log_Wt_change_tab <- Fib_NoWtLoss_reg_log_Wt_change_tab[-c(1)]
Fib_NoWtLoss_reg_log_Wt_change_tab$k <- Fib_NoWtLoss_reg_log_Wt_change[["k"]]
Fib_NoWtLoss_reg_log_Wt_change_tab$r2 <- Fib_NoWtLoss_reg_log_Wt_change[["R2"]]
Fib_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change"

Fib_NoWtLoss_reg_log_Gluc_change <- metareg(Fib_NoWtLoss_metan_full, log_Gluc_change)
Fib_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(Fib_NoWtLoss_reg_log_Gluc_change[["beta"]])
Fib_NoWtLoss_reg_log_Gluc_change_tab$se <- Fib_NoWtLoss_reg_log_Gluc_change[["se"]]
Fib_NoWtLoss_reg_log_Gluc_change_tab$pval <- Fib_NoWtLoss_reg_log_Gluc_change[["pval"]]
Fib_NoWtLoss_reg_log_Gluc_change_tab$beta <- Fib_NoWtLoss_reg_log_Gluc_change[["beta"]]
Fib_NoWtLoss_reg_log_Gluc_change_tab <- Fib_NoWtLoss_reg_log_Gluc_change_tab[-c(1),]
Fib_NoWtLoss_reg_log_Gluc_change_tab <- Fib_NoWtLoss_reg_log_Gluc_change_tab[-c(1)]
Fib_NoWtLoss_reg_log_Gluc_change_tab$k <- Fib_NoWtLoss_reg_log_Gluc_change[["k"]]
Fib_NoWtLoss_reg_log_Gluc_change_tab$r2 <- Fib_NoWtLoss_reg_log_Gluc_change[["R2"]]
Fib_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

Fib_NoWtLoss_reg_log_Insul_change <- metareg(Fib_NoWtLoss_metan_full, log_Insul_change)
Fib_NoWtLoss_reg_log_Insul_change_tab <- data.frame(Fib_NoWtLoss_reg_log_Insul_change[["beta"]])
Fib_NoWtLoss_reg_log_Insul_change_tab$se <- Fib_NoWtLoss_reg_log_Insul_change[["se"]]
Fib_NoWtLoss_reg_log_Insul_change_tab$pval <- Fib_NoWtLoss_reg_log_Insul_change[["pval"]]
Fib_NoWtLoss_reg_log_Insul_change_tab$beta <- Fib_NoWtLoss_reg_log_Insul_change[["beta"]]
Fib_NoWtLoss_reg_log_Insul_change_tab <- Fib_NoWtLoss_reg_log_Insul_change_tab[-c(1),]
Fib_NoWtLoss_reg_log_Insul_change_tab <- Fib_NoWtLoss_reg_log_Insul_change_tab[-c(1)]
Fib_NoWtLoss_reg_log_Insul_change_tab$k <- Fib_NoWtLoss_reg_log_Insul_change[["k"]]
Fib_NoWtLoss_reg_log_Insul_change_tab$r2 <- Fib_NoWtLoss_reg_log_Insul_change[["R2"]]
Fib_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change"

Fib_NoWtLoss_metareg_sumtab <- rbind(Fib_NoWtLoss_reg_log_Wt_change_tab, Fib_NoWtLoss_reg_log_Gluc_change_tab, Fib_NoWtLoss_reg_log_Insul_change_tab)

Fib_NoWtLoss_metareg_sumtab$text <- paste(format(round(Fib_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(Fib_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
Fib_NoWtLoss_metareg_sumtab$text <- paste(Fib_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL)
Fib_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(Fib_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
Fib_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(Fib_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(Fib_NoWtLoss_metareg_sumtab,file="Fib_NoWtLoss_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="Fib_NoWtLoss_bubble_weight_change.pdf",width=6,height=6)
Fib_NoWtLoss_bubble_weight_change <- bubble(Fib_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in fibrosis stage", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
Fib_NoWtLoss_bubble_weight_change
dev.off()


## following on from Fibrosis analysis

setwd("~/AnMod_Aug20/AnMod_eLife_Aug20_v1/NAS_out")


########

## Analysis for histological NAS score

########


## Power analysis
library(pwr)

## calculate common SD
full_data$NAS_Int_SD2 <- full_data$NAS_Int_SD*full_data$NAS_Int_SD
full_data$NAS_Pla_SD2 <- full_data$NAS_Pla_SD*full_data$NAS_Pla_SD
full_data$NAS_comm_SD <- sqrt(((full_data$NAS_Int_SD2+full_data$NAS_Pla_SD2)/2))
full_data$NAS_m_diff <- full_data$NAS_Pla_Mean-full_data$NAS_Int_Mean
full_data$NAS_eff_size <- full_data$NAS_m_diff/full_data$NAS_comm_SD

library(tidyr)

NAS_data <- full_data
NAS_data <- NAS_data %>% drop_na(NAS_eff_size)

NAS_data$power <- pwr.t2n.test(n1 = NAS_data$NAS_Int_size, n2 = NAS_data$NAS_Pla_size, d = NAS_data$NAS_eff_size)$power

write.table(NAS_data$power,file="NAS_data_power.csv",sep=",")

hist(NAS_data$power)

NAS_dens_power <- density(NAS_data$power)

pdf(file="NAS_kernel_power_v1.pdf")
plot(NAS_dens_power, main="Kernel Density of study powers", xlab = "Study power (n=565)")
polygon(NAS_dens_power, col="red", border="blue")
dev.off()


## load packages for metan
library(dmetar)
library(meta)
library(metafor)
library(readxl)
max.print = 100000

## drop where <3 unique studies for any drug class
NAS_drugsclass_counts <- NAS_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
NAS_class_counts <- NAS_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

NAS_class_less3 = subset(NAS_class_counts, n <3)
str(NAS_class_less3)
NAS_class_less3$Drug_Class_new_1_all <- droplevels(NAS_class_less3$Drug_Class_new_1_all)
NAS_class_droplist <- NAS_class_less3$Drug_Class_new_1_all

NAS_data_min3class <- NAS_data %>% filter(!Drug_Class_new_1_all %in% NAS_class_droplist)


## run metan
NAS_metan_class_main <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

NAS_metan_class <- update(NAS_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
NAS_metan_class_tab <- data.frame(NAS_metan_class[["TE.random.w"]])
NAS_metan_class_tab$drug <- NAS_metan_class[["bylevs"]]
NAS_metan_class_tab$SE <- NAS_metan_class[["seTE.random.w"]]
NAS_metan_class_tab$lower <- NAS_metan_class[["lower.random.w"]]
NAS_metan_class_tab$upper <- NAS_metan_class[["upper.random.w"]]
NAS_metan_class_tab$Pz <- NAS_metan_class[["pval.random.w"]]
NAS_metan_class_tab$weight <- NAS_metan_class[["w.random.w"]]
NAS_metan_class_tab$k <- NAS_metan_class[["k.w"]]
NAS_metan_class_tab$controls <- NAS_metan_class[["n.c.w"]]
NAS_metan_class_tab$experimental <- NAS_metan_class[["n.e.w"]]
NAS_metan_class_tab$Q <- NAS_metan_class[["Q.w"]]
NAS_metan_class_tab$Pq <- NAS_metan_class[["pval.Q.w"]]
NAS_metan_class_tab$tau <- NAS_metan_class[["tau.w"]]
NAS_metan_class_tab$I2 <- NAS_metan_class[["I2.w"]]
NAS_metan_class_tab <- NAS_metan_class_tab %>% rename(MD = NAS_metan_class...TE.random.w...)
NAS_metan_class_tab <- NAS_metan_class_tab[order(-NAS_metan_class_tab$MD),]
NAS_metan_class_tab$row_number <- 1:nrow(NAS_metan_class_tab) 
NAS_metan_class_tab$subgroup <- "Subgroup"
NAS_class_counts <- NAS_class_counts %>% rename(drug = Drug_Class_new_1_all)
NAS_metan_class_tab <- merge(NAS_class_counts, NAS_metan_class_tab, by="drug")

NAS_metan_class_tab_overall <- data.frame(NAS_metan_class[["TE.random"]])
NAS_metan_class_tab_overall$drug <- "Overall"
NAS_metan_class_tab_overall$SE <- NAS_metan_class[["seTE.random"]]
NAS_metan_class_tab_overall$lower <- NAS_metan_class[["lower.random"]]
NAS_metan_class_tab_overall$upper <- NAS_metan_class[["upper.random"]]
NAS_metan_class_tab_overall$Pz <- NAS_metan_class[["pval.random"]]
NAS_metan_class_tab_overall$weight <- (max(NAS_metan_class_tab$weight)*2)
NAS_metan_class_tab_overall$k <- NAS_metan_class[["k"]]
NAS_metan_class_tab_overall$controls <- sum(NAS_metan_class_tab$controls)
NAS_metan_class_tab_overall$experimental <- sum(NAS_metan_class_tab$experimental)
NAS_metan_class_tab_overall$Q <- NAS_metan_class[["Q"]]
NAS_metan_class_tab_overall$Pq <- NAS_metan_class[["pval.Q"]]
NAS_metan_class_tab_overall$tau <- NAS_metan_class[["tau"]]
NAS_metan_class_tab_overall$I2 <- NAS_metan_class[["I2"]]
NAS_metan_class_tab_overall <- NAS_metan_class_tab_overall %>% rename(MD = NAS_metan_class...TE.random...)
NAS_metan_class_tab_overall$row_number <- ((nrow(NAS_metan_class_tab))+1)
NAS_metan_class_tab_overall$subgroup <- "Overall"
NAS_metan_class_tab_overall$n <- sum(NAS_metan_class_tab$n)
NAS_metan_class_sumtab <- rbind(NAS_metan_class_tab, NAS_metan_class_tab_overall)
NAS_metan_class_sumtab$weight <- as.numeric(NAS_metan_class_sumtab$weight)
NAS_metan_class_sumtab$row_number <- as.numeric(NAS_metan_class_sumtab$row_number)
NAS_metan_class_sumtab$subgroup <- as.factor(NAS_metan_class_sumtab$subgroup)
NAS_metan_class_sumtab$total = NAS_metan_class_sumtab$controls + NAS_metan_class_sumtab$experimental

NAS_metan_class_sumtab$text <- paste(format(round(NAS_metan_class_sumtab$MD, 1), nsmall = 1), format(round(NAS_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
NAS_metan_class_sumtab$text <- paste(NAS_metan_class_sumtab$text, format(round(NAS_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)

NAS_metan_class_sumtab$text <- paste(NAS_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

NAS_metan_class_sumtab$SE_1dig <- paste(format(round(NAS_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
NAS_metan_class_sumtab$Pz_1dig <- paste((signif(NAS_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
NAS_metan_class_sumtab$tI2_2dig <- paste(format(round(NAS_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
NAS_metan_class_sumtab$tau_1dig <- paste(format(round(NAS_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
NAS_metan_class_sumtab$Pq_1dig <- paste((signif(NAS_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(NAS_metan_class_sumtab,file="NAS_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(NAS_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(NAS_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(NAS_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = NAS_metan_class_tab_overall$lower
overall_max = NAS_metan_class_tab_overall$upper

NAS_metan_class_ybreaks <- nrow(NAS_metan_class_sumtab)
NAS_metan_class_sumtab <- NAS_metan_class_sumtab[order(NAS_metan_class_sumtab$row_number),]

NAS_metan_class_forest <- ggplot(data= NAS_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: NAS_metan_class_ybreaks, labels = NAS_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in NAFLD Activity Score (NAS)") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=25, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-6.5, 3), breaks=seq(-5, 0, 1), expand=c(0,0)) + geom_text(data=NAS_metan_class_sumtab, aes(x=.65, label=text), size = 3.5, hjust=0) + geom_text(data=NAS_metan_class_sumtab, aes(x=-6.3, label=k), size = 3.5, hjust=0) + geom_text(data=NAS_metan_class_sumtab, aes(x=-5.8, label=total), size = 3.5, hjust=0)

pdf(file="NAS_metan_class_forest.pdf",width=9,height=6)
NAS_metan_class_forest
dev.off()


#####################

#######

## bias analysis

NAS_class_eggers <- eggers.test(x = NAS_metan_class_main)
NAS_class_eggers
sink("NAS_class_eggers.txt")
print(NAS_class_eggers)
sink()

NAS_class_trimfill <- trimfill(NAS_metan_class_main)
NAS_class_trimfill
sink("NAS_class_trimfill.txt")
print(NAS_class_trimfill)
sink()

pdf(file="NAS_class_funnel.pdf")
funnel(NAS_class_trimfill, xlab="Mean difference in hepatic NAS (%)", xlim=c(-8,5), ylim=c(.8,-.1), contour = c(.95,.975,.99), col.contour=c("darkblue","blue","lightblue")) + legend(-7, -0.05, c("p < 0.05", "p < 0.025", "p < 0.01"), bty = "n", fill=c("darkblue","blue","lightblue"))
dev.off()

## use Baujat plot to look for outliers

pdf(file="NAS_class_baujat.pdf")
NAS_class_baujat <- baujat(NAS_metan_class_main)
NAS_class_baujat
dev.off()

## look for outliers based on SD

NAS_commSD_mean <- mean(NAS_data$NAS_comm_SD, na.rm=TRUE)
NAS_commSD_SD <- sd(NAS_data$NAS_comm_SD, na.rm=TRUE)

NAS_commSD_norm <- dnorm(NAS_data$NAS_comm_SD, mean = NAS_commSD_mean, sd = NAS_commSD_SD, log = FALSE)
NAS_commSD_norm <- as.data.frame(NAS_commSD_norm)
NAS_commSD_norm$NAS_comm_SD <- NAS_data$NAS_comm_SD
NAS_commSD_norm$Paper <- NAS_data$Paper

pdf(file = "NAS_commSD_norm.pdf")
plot(NAS_commSD_norm$NAS_comm_SD, NAS_commSD_norm$NAS_commSD_norm)
dev.off()

## exclude studies with NAS_comm_SD >2 or high contribution to heterogeneity on baujat plot

NAS_NoOutlier_data = subset(NAS_data, NAS_comm_SD <2)
NAS_NoOutlier_data <- NAS_NoOutlier_data %>% filter(Paper != "Ishii 2009" & Paper != "Witek 2009_3")


#######


## re-rerun after outliers excluded


## drop where <3 unique studies for any drug class
NAS_NoOutlier_drugsclass_counts <- NAS_NoOutlier_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
NAS_NoOutlier_class_counts <- NAS_NoOutlier_drugsclass_counts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

NAS_NoOutlier_class_less3 = subset(NAS_NoOutlier_class_counts, n <3)
str(NAS_NoOutlier_class_less3)
NAS_NoOutlier_class_less3$Drug_Class_new_1_all <- droplevels(NAS_NoOutlier_class_less3$Drug_Class_new_1_all)
NAS_NoOutlier_class_droplist <- NAS_NoOutlier_class_less3$Drug_Class_new_1_all

NAS_NoOutlier_data_min3class <- NAS_NoOutlier_data %>% filter(!Drug_Class_new_1_all %in% NAS_NoOutlier_class_droplist)


## run metan
NAS_NoOutlier_metan_class_main <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_NoOutlier_data_min3class, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

NAS_NoOutlier_metan_class <- update(NAS_NoOutlier_metan_class_main, byvar = Drug_Class_new_1_all, bylab = "Drug Class")

## make summary table of results
NAS_NoOutlier_metan_class_tab <- data.frame(NAS_NoOutlier_metan_class[["TE.random.w"]])
NAS_NoOutlier_metan_class_tab$drug <- NAS_NoOutlier_metan_class[["bylevs"]]
NAS_NoOutlier_metan_class_tab$SE <- NAS_NoOutlier_metan_class[["seTE.random.w"]]
NAS_NoOutlier_metan_class_tab$lower <- NAS_NoOutlier_metan_class[["lower.random.w"]]
NAS_NoOutlier_metan_class_tab$upper <- NAS_NoOutlier_metan_class[["upper.random.w"]]
NAS_NoOutlier_metan_class_tab$Pz <- NAS_NoOutlier_metan_class[["pval.random.w"]]
NAS_NoOutlier_metan_class_tab$weight <- NAS_NoOutlier_metan_class[["w.random.w"]]
NAS_NoOutlier_metan_class_tab$k <- NAS_NoOutlier_metan_class[["k.w"]]
NAS_NoOutlier_metan_class_tab$controls <- NAS_NoOutlier_metan_class[["n.c.w"]]
NAS_NoOutlier_metan_class_tab$experimental <- NAS_NoOutlier_metan_class[["n.e.w"]]
NAS_NoOutlier_metan_class_tab$Q <- NAS_NoOutlier_metan_class[["Q.w"]]
NAS_NoOutlier_metan_class_tab$Pq <- NAS_NoOutlier_metan_class[["pval.Q.w"]]
NAS_NoOutlier_metan_class_tab$tau <- NAS_NoOutlier_metan_class[["tau.w"]]
NAS_NoOutlier_metan_class_tab$I2 <- NAS_NoOutlier_metan_class[["I2.w"]]
NAS_NoOutlier_metan_class_tab <- NAS_NoOutlier_metan_class_tab %>% rename(MD = NAS_NoOutlier_metan_class...TE.random.w...)
NAS_NoOutlier_metan_class_tab <- NAS_NoOutlier_metan_class_tab[order(-NAS_NoOutlier_metan_class_tab$MD),]
NAS_NoOutlier_metan_class_tab <- NAS_NoOutlier_metan_class_tab %>% mutate(row_number= 1:n())
NAS_NoOutlier_metan_class_tab$subgroup <- "Subgroup"
NAS_NoOutlier_class_counts <- NAS_NoOutlier_class_counts %>% rename(drug = Drug_Class_new_1_all)
NAS_NoOutlier_metan_class_tab <- merge(NAS_NoOutlier_class_counts, NAS_NoOutlier_metan_class_tab, by="drug")

NAS_NoOutlier_metan_class_tab_overall <- data.frame(NAS_NoOutlier_metan_class[["TE.random"]])
NAS_NoOutlier_metan_class_tab_overall$drug <- "Overall"
NAS_NoOutlier_metan_class_tab_overall$SE <- NAS_NoOutlier_metan_class[["seTE.random"]]
NAS_NoOutlier_metan_class_tab_overall$lower <- NAS_NoOutlier_metan_class[["lower.random"]]
NAS_NoOutlier_metan_class_tab_overall$upper <- NAS_NoOutlier_metan_class[["upper.random"]]
NAS_NoOutlier_metan_class_tab_overall$Pz <- NAS_NoOutlier_metan_class[["pval.random"]]
NAS_NoOutlier_metan_class_tab_overall$weight <- (max(NAS_NoOutlier_metan_class_tab$weight)*2)
NAS_NoOutlier_metan_class_tab_overall$k <- NAS_NoOutlier_metan_class[["k"]]
NAS_NoOutlier_metan_class_tab_overall$controls <- sum(NAS_NoOutlier_metan_class_tab$controls)
NAS_NoOutlier_metan_class_tab_overall$experimental <- sum(NAS_NoOutlier_metan_class_tab$experimental)
NAS_NoOutlier_metan_class_tab_overall$Q <- NAS_NoOutlier_metan_class[["Q"]]
NAS_NoOutlier_metan_class_tab_overall$Pq <- NAS_NoOutlier_metan_class[["pval.Q"]]
NAS_NoOutlier_metan_class_tab_overall$tau <- NAS_NoOutlier_metan_class[["tau"]]
NAS_NoOutlier_metan_class_tab_overall$I2 <- NAS_NoOutlier_metan_class[["I2"]]
NAS_NoOutlier_metan_class_tab_overall <- NAS_NoOutlier_metan_class_tab_overall %>% rename(MD = NAS_NoOutlier_metan_class...TE.random...)
NAS_NoOutlier_metan_class_tab_overall$row_number <- ((nrow(NAS_NoOutlier_metan_class_tab))+1)
NAS_NoOutlier_metan_class_tab_overall$subgroup <- "Overall"
NAS_NoOutlier_metan_class_tab_overall$n <- sum(NAS_NoOutlier_metan_class_tab$n)
NAS_NoOutlier_metan_class_sumtab <- rbind(NAS_NoOutlier_metan_class_tab, NAS_NoOutlier_metan_class_tab_overall)
NAS_NoOutlier_metan_class_sumtab$weight <- as.numeric(NAS_NoOutlier_metan_class_sumtab$weight)
NAS_NoOutlier_metan_class_sumtab$row_number <- as.numeric(NAS_NoOutlier_metan_class_sumtab$row_number)
NAS_NoOutlier_metan_class_sumtab$subgroup <- as.factor(NAS_NoOutlier_metan_class_sumtab$subgroup)
NAS_NoOutlier_metan_class_sumtab$total = NAS_NoOutlier_metan_class_sumtab$controls + NAS_NoOutlier_metan_class_sumtab$experimental

NAS_NoOutlier_metan_class_sumtab$text <- paste(format(round(NAS_NoOutlier_metan_class_sumtab$MD, 1), nsmall = 1), format(round(NAS_NoOutlier_metan_class_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
NAS_NoOutlier_metan_class_sumtab$text <- paste(NAS_NoOutlier_metan_class_sumtab$text, format(round(NAS_NoOutlier_metan_class_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
NAS_NoOutlier_metan_class_sumtab$text <- paste(NAS_NoOutlier_metan_class_sumtab$text, "", sep = ")", collapse = NULL)

NAS_NoOutlier_metan_class_sumtab$SE_1dig <- paste(format(round(NAS_NoOutlier_metan_class_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
NAS_NoOutlier_metan_class_sumtab$Pz_1dig <- paste((signif(NAS_NoOutlier_metan_class_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
NAS_NoOutlier_metan_class_sumtab$tI2_2dig <- paste(format(round(NAS_NoOutlier_metan_class_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
NAS_NoOutlier_metan_class_sumtab$tau_1dig <- paste(format(round(NAS_NoOutlier_metan_class_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
NAS_NoOutlier_metan_class_sumtab$Pq_1dig <- paste((signif(NAS_NoOutlier_metan_class_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(NAS_NoOutlier_metan_class_sumtab,file="NAS_NoOutlier_metan_class_sumtab.csv",sep=",")

## make forest plot

library(ggplot2)

label_bold <- ifelse(NAS_NoOutlier_metan_class_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(NAS_NoOutlier_metan_class_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(NAS_NoOutlier_metan_class_sumtab$subgroup == "Overall", "12", "10")

overall_min = NAS_NoOutlier_metan_class_tab_overall$lower
overall_max = NAS_NoOutlier_metan_class_tab_overall$upper

NAS_NoOutlier_metan_class_ybreaks <- nrow(NAS_NoOutlier_metan_class_sumtab)
NAS_NoOutlier_metan_class_sumtab <- NAS_NoOutlier_metan_class_sumtab[order(NAS_NoOutlier_metan_class_sumtab$row_number),]

NAS_NoOutlier_metan_class_forest <- ggplot(data= NAS_NoOutlier_metan_class_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: NAS_NoOutlier_metan_class_ybreaks, labels = NAS_NoOutlier_metan_class_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in NAFLD Activity Score (NAS)") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=.85, xmax=150, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-6.5, 3), breaks=seq(-5, 0, 1), expand=c(0,0)) + geom_text(data=NAS_NoOutlier_metan_class_sumtab, aes(x=.95, label=text), size = 3.5, hjust=0) + geom_text(data=NAS_NoOutlier_metan_class_sumtab, aes(x=-6.3, label=k), size = 3.5, hjust=0) + geom_text(data=NAS_NoOutlier_metan_class_sumtab, aes(x=-5.8, label=total), size = 3.5, hjust=0)

pdf(file="NAS_NoOutlier_metan_class_forest.pdf",width=9,height=6)
NAS_NoOutlier_metan_class_forest
dev.off()

#######

## re-run using sub-grouping by individual drugs



## drop where <3 unique studies for any drug class
NAS_drugIndiv_counts <- NAS_data %>% group_by(Indiv_drug_class_3, Study) %>% summarise(n = n())
NAS_drugIndiv_sum_counts <- NAS_drugIndiv_counts %>% group_by(Indiv_drug_class_3) %>% summarise(n = n())

NAS_drugIndiv_less3 = subset(NAS_drugIndiv_sum_counts, n <3)
str(NAS_drugIndiv_less3)
NAS_drugIndiv_less3$Indiv_drug_class_3 <- droplevels(NAS_drugIndiv_less3$Indiv_drug_class_3)
NAS_drugIndiv_droplist <- NAS_drugIndiv_less3$Indiv_drug_class_3

NAS_data_min3drug <- NAS_data %>% filter(!Indiv_drug_class_3 %in% NAS_drugIndiv_droplist)


## run metan
NAS_metan_drugIndiv <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data_min3drug, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

NAS_metan_drugIndiv <- update(NAS_metan_drugIndiv, byvar = Indiv_drug_class_3, bylab = "Drug")

## make summary table of results
NAS_metan_drugIndiv_tab <- data.frame(NAS_metan_drugIndiv[["TE.random.w"]])
NAS_metan_drugIndiv_tab$drug <- NAS_metan_drugIndiv[["bylevs"]]
NAS_metan_drugIndiv_tab$SE <- NAS_metan_drugIndiv[["seTE.random.w"]]
NAS_metan_drugIndiv_tab$lower <- NAS_metan_drugIndiv[["lower.random.w"]]
NAS_metan_drugIndiv_tab$upper <- NAS_metan_drugIndiv[["upper.random.w"]]
NAS_metan_drugIndiv_tab$Pz <- NAS_metan_drugIndiv[["pval.random.w"]]
NAS_metan_drugIndiv_tab$weight <- NAS_metan_drugIndiv[["w.random.w"]]
NAS_metan_drugIndiv_tab$k <- NAS_metan_drugIndiv[["k.w"]]
NAS_metan_drugIndiv_tab$controls <- NAS_metan_drugIndiv[["n.c.w"]]
NAS_metan_drugIndiv_tab$experimental <- NAS_metan_drugIndiv[["n.e.w"]]
NAS_metan_drugIndiv_tab$Q <- NAS_metan_drugIndiv[["Q.w"]]
NAS_metan_drugIndiv_tab$Pq <- NAS_metan_drugIndiv[["pval.Q.w"]]
NAS_metan_drugIndiv_tab$tau <- NAS_metan_drugIndiv[["tau.w"]]
NAS_metan_drugIndiv_tab$I2 <- NAS_metan_drugIndiv[["I2.w"]]
NAS_metan_drugIndiv_tab <- NAS_metan_drugIndiv_tab %>% rename(MD = NAS_metan_drugIndiv...TE.random.w...)
NAS_metan_drugIndiv_tab <- NAS_metan_drugIndiv_tab[order(-NAS_metan_drugIndiv_tab$MD),]
NAS_metan_drugIndiv_tab <- NAS_metan_drugIndiv_tab %>% mutate(row_number= 1:n())
NAS_metan_drugIndiv_tab$subgroup <- "Subgroup"
NAS_drugIndiv_sum_counts <- NAS_drugIndiv_sum_counts %>% rename(drug = Indiv_drug_class_3)
NAS_metan_drugIndiv_tab <- merge(NAS_drugIndiv_sum_counts, NAS_metan_drugIndiv_tab, by="drug")

NAS_metan_drugIndiv_tab_overall <- data.frame(NAS_metan_drugIndiv[["TE.random"]])
NAS_metan_drugIndiv_tab_overall$drug <- "Overall"
NAS_metan_drugIndiv_tab_overall$SE <- NAS_metan_drugIndiv[["seTE.random"]]
NAS_metan_drugIndiv_tab_overall$lower <- NAS_metan_drugIndiv[["lower.random"]]
NAS_metan_drugIndiv_tab_overall$upper <- NAS_metan_drugIndiv[["upper.random"]]
NAS_metan_drugIndiv_tab_overall$Pz <- NAS_metan_drugIndiv[["pval.random"]]
NAS_metan_drugIndiv_tab_overall$weight <- (max(NAS_metan_drugIndiv_tab$weight)*2)
NAS_metan_drugIndiv_tab_overall$k <- NAS_metan_drugIndiv[["k"]]
NAS_metan_drugIndiv_tab_overall$controls <- sum(NAS_metan_drugIndiv_tab$controls)
NAS_metan_drugIndiv_tab_overall$experimental <- sum(NAS_metan_drugIndiv_tab$experimental)
NAS_metan_drugIndiv_tab_overall$Q <- NAS_metan_drugIndiv[["Q"]]
NAS_metan_drugIndiv_tab_overall$Pq <- NAS_metan_drugIndiv[["pval.Q"]]
NAS_metan_drugIndiv_tab_overall$tau <- NAS_metan_drugIndiv[["tau"]]
NAS_metan_drugIndiv_tab_overall$I2 <- NAS_metan_drugIndiv[["I2"]]
NAS_metan_drugIndiv_tab_overall <- NAS_metan_drugIndiv_tab_overall %>% rename(MD = NAS_metan_drugIndiv...TE.random...)
NAS_metan_drugIndiv_tab_overall$row_number <- ((nrow(NAS_metan_drugIndiv_tab))+1)
NAS_metan_drugIndiv_tab_overall$subgroup <- "Overall"
NAS_metan_drugIndiv_tab_overall$n <- sum(NAS_metan_drugIndiv_tab$n)
NAS_metan_drugIndiv_sumtab <- rbind(NAS_metan_drugIndiv_tab, NAS_metan_drugIndiv_tab_overall)
NAS_metan_drugIndiv_sumtab$weight <- as.numeric(NAS_metan_drugIndiv_sumtab$weight)
NAS_metan_drugIndiv_sumtab$row_number <- as.numeric(NAS_metan_drugIndiv_sumtab$row_number)
NAS_metan_drugIndiv_sumtab$subgroup <- as.factor(NAS_metan_drugIndiv_sumtab$subgroup)
NAS_metan_drugIndiv_sumtab$total = NAS_metan_drugIndiv_sumtab$controls + NAS_metan_drugIndiv_sumtab$experimental

NAS_metan_drugIndiv_sumtab$text <- paste(format(round(NAS_metan_drugIndiv_sumtab$MD, 1), nsmall = 1), format(round(NAS_metan_drugIndiv_sumtab$lower, 1), nsmall = 1), sep = " (", collapse = NULL)
NAS_metan_drugIndiv_sumtab$text <- paste(NAS_metan_drugIndiv_sumtab$text, format(round(NAS_metan_drugIndiv_sumtab$upper, 1), nsmall = 1), sep = ", ", collapse = NULL)
NAS_metan_drugIndiv_sumtab$text <- paste(NAS_metan_drugIndiv_sumtab$text, "", sep = ")", collapse = NULL)

NAS_metan_drugIndiv_sumtab$SE_1dig <- paste(format(round(NAS_metan_drugIndiv_sumtab$SE, 1), nsmall = 1), "", sep = "", collapse = NULL)
NAS_metan_drugIndiv_sumtab$Pz_1dig <- paste((signif(NAS_metan_drugIndiv_sumtab$Pz, digits=2)), "", sep = "", collapse = NULL)
NAS_metan_drugIndiv_sumtab$tI2_2dig <- paste(format(round(NAS_metan_drugIndiv_sumtab$tau, 2), nsmall = 2), "", sep = "", collapse = NULL)
NAS_metan_drugIndiv_sumtab$tau_1dig <- paste(format(round(NAS_metan_drugIndiv_sumtab$tau, 1), nsmall = 1), "", sep = "", collapse = NULL)
NAS_metan_drugIndiv_sumtab$Pq_1dig <- paste((signif(NAS_metan_drugIndiv_sumtab$Pq, digits=2)), "", sep = "", collapse = NULL)

write.table(NAS_metan_drugIndiv_sumtab,file="NAS_metan_drugIndiv_sumtab.csv",sep=",")

## make forest plot

label_bold <- ifelse(NAS_metan_drugIndiv_sumtab$subgroup == "Overall", "bold", "plain")
label_colour <- ifelse(NAS_metan_drugIndiv_sumtab$subgroup == "Overall", "red3", "Black")
label_size <- ifelse(NAS_metan_drugIndiv_sumtab$subgroup == "Overall", "12", "10")

overall_min = NAS_metan_drugIndiv_tab_overall$lower
overall_max = NAS_metan_drugIndiv_tab_overall$upper

NAS_metan_drugIndiv_ybreaks <- nrow(NAS_metan_drugIndiv_sumtab)
NAS_metan_drugIndiv_sumtab <- NAS_metan_drugIndiv_sumtab[order(NAS_metan_drugIndiv_sumtab$row_number),]

NAS_metan_drugIndiv_forest <- ggplot(data= NAS_metan_drugIndiv_sumtab, aes(y=row_number, x=MD, xmin=lower, xmax=upper)) + geom_vline(xintercept=0, color="black", linetype="longdash", alpha=.35, size=.5) + geom_rect(aes(xmin=overall_min, xmax=overall_max, ymin=0, ymax=Inf),fill="grey84", alpha=.3) + geom_errorbarh(height=.1, size=.2) + geom_point(shape=18, aes(size = weight, color=subgroup))  + scale_y_continuous(name = "", breaks=1: NAS_metan_drugIndiv_ybreaks, labels = NAS_metan_drugIndiv_sumtab$drug, trans="reverse") + scale_color_manual(values=c('red3','grey41')) + theme_classic() + xlab("Mean difference in NAFLD Activity Score (NAS)") + theme(plot.margin = unit(c(1, 2, .5, 0), "cm"), legend.position="", axis.ticks.y = element_blank(), axis.line.y = element_blank(), axis.text.y = element_text(face=label_bold, size=label_size, colour =label_colour)) + geom_rect(xmin=1.4, xmax=5, ymin=-100, ymax=27, fill="white", size=0) + geom_rect(xmin=-8, xmax=-5.5, ymin=-100, ymax=27, fill="white", size=0) + scale_x_continuous(limits=c(-8, 4), breaks=seq(-6, 1, 1), expand=c(0,0)) + geom_text(data=NAS_metan_drugIndiv_sumtab, aes(x=1.5, label=text), size = 3.5, hjust=0) + geom_text(data=NAS_metan_drugIndiv_sumtab, aes(x=-7.5, label=k), size = 3.5, hjust=0) + geom_text(data=NAS_metan_drugIndiv_sumtab, aes(x=-7, label=total), size = 3.5, hjust=0)

pdf(file="NAS_metan_drugIndiv_forest.pdf",width=9,height=6)
NAS_metan_drugIndiv_forest
dev.off()


########

## calculate sample size needed for average results
## mean comm_SD = NAS_commSD_mean
## meta-analysis mean difference = NAS_metan_class_main[["TE.random"]]
## calculate Cohen's d
NAS_cohen_d = NAS_metan_class_main[["TE.random"]] / NAS_commSD_mean

NAS_samplesize_av <- pwr.t.test(d = NAS_cohen_d, power = 0.80, sig.level = 0.05)
## n = 16 - number in **each** group

## find number of studies with n > NAS_samplesize_av

NAS_data$total = NAS_data$NAS_Int_size + NAS_data$NAS_Pla_size

NAS_pwrcount <- NAS_data %>% group_by(total, Paper) %>% summarise(n = n())

NAS_pwrcount_adequate = subset(NAS_pwrcount, total >= 2*(NAS_samplesize_av[["n"]]))
write.table(NAS_pwrcount_adequate,file="NAS_pwrcount_adequate.csv",sep=",")

########

## run meta-regressions on full NAS dataset for continuous traits

NAS_metan_full <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## create metan with >3 for each level of categorical variables

## Background

NAS_bg_counts <- NAS_data %>% group_by(Background_simple, Study) %>% summarise(n = n())
NAS_bg_counts_sum <- NAS_bg_counts %>% group_by(Background_simple) %>% summarise(n = n())

NAS_bg_less3 = subset(NAS_bg_counts_sum, n <3)
NAS_bg_less3$Background_simple <- droplevels(NAS_bg_less3$Background_simple)
NAS_bg_droplist <- NAS_bg_less3$Background_simple

NAS_data_min3bg <- NAS_data %>% filter(!Background_simple %in% NAS_bg_droplist)

NAS_metan_bg <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data_min3bg, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## Model 

NAS_model_counts <- NAS_data %>% group_by(Model_simple, Study) %>% summarise(n = n())
NAS_model_counts_sum <- NAS_model_counts %>% group_by(Model_simple) %>% summarise(n = n())

NAS_model_less3 = subset(NAS_model_counts_sum, n <3)
NAS_model_less3$Model_simple <- droplevels(NAS_model_less3$Model_simple)
NAS_model_droplist <- NAS_model_less3$Model_simple

NAS_data_min3model <- NAS_data %>% filter(!Model_simple %in% NAS_model_droplist)

NAS_metan_model <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_data_min3model, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

## run metaregs

NAS_reg_Qual_score <- metareg(NAS_metan_full, Qual_score)
NAS_reg_Qual_score_tab <- data.frame(NAS_reg_Qual_score[["beta"]])
NAS_reg_Qual_score_tab$se <- NAS_reg_Qual_score[["se"]]
NAS_reg_Qual_score_tab$pval <- NAS_reg_Qual_score[["pval"]]
NAS_reg_Qual_score_tab$beta <- NAS_reg_Qual_score[["beta"]]
NAS_reg_Qual_score_tab <- NAS_reg_Qual_score_tab[-c(1),]
NAS_reg_Qual_score_tab <- NAS_reg_Qual_score_tab[-c(1)]
NAS_reg_Qual_score_tab$k <- NAS_reg_Qual_score[["k"]]
NAS_reg_Qual_score_tab$r2 <- NAS_reg_Qual_score[["R2"]]
NAS_reg_Qual_score_tab$var <- "Qual_score"

NAS_reg_Protocol <- metareg(NAS_metan_full, Protocol)
NAS_reg_Protocol_tab <- data.frame(NAS_reg_Protocol[["beta"]])
NAS_reg_Protocol_tab$se <- NAS_reg_Protocol[["se"]]
NAS_reg_Protocol_tab$pval <- NAS_reg_Protocol[["pval"]]
NAS_reg_Protocol_tab$beta <- NAS_reg_Protocol[["beta"]]
NAS_reg_Protocol_tab <- NAS_reg_Protocol_tab[-c(1),]
NAS_reg_Protocol_tab <- NAS_reg_Protocol_tab[-c(1)]
NAS_reg_Protocol_tab$k <- NAS_reg_Protocol[["k"]]
NAS_reg_Protocol_tab$r2 <- NAS_reg_Protocol[["R2"]]
NAS_reg_Protocol_tab$var <- "Protocol"

NAS_reg_Randomisation <- metareg(NAS_metan_full, Randomisation)
NAS_reg_Randomisation_tab <- data.frame(NAS_reg_Randomisation[["beta"]])
NAS_reg_Randomisation_tab$se <- NAS_reg_Randomisation[["se"]]
NAS_reg_Randomisation_tab$pval <- NAS_reg_Randomisation[["pval"]]
NAS_reg_Randomisation_tab$beta <- NAS_reg_Randomisation[["beta"]]
NAS_reg_Randomisation_tab <- NAS_reg_Randomisation_tab[-c(1),]
NAS_reg_Randomisation_tab <- NAS_reg_Randomisation_tab[-c(1)]
NAS_reg_Randomisation_tab$k <- NAS_reg_Randomisation[["k"]]
NAS_reg_Randomisation_tab$r2 <- NAS_reg_Randomisation[["R2"]]
NAS_reg_Randomisation_tab$var <- "Randomisation"

NAS_reg_Blinding <- metareg(NAS_metan_full, Blinding)
NAS_reg_Blinding_tab <- data.frame(NAS_reg_Blinding[["beta"]])
NAS_reg_Blinding_tab$se <- NAS_reg_Blinding[["se"]]
NAS_reg_Blinding_tab$pval <- NAS_reg_Blinding[["pval"]]
NAS_reg_Blinding_tab$beta <- NAS_reg_Blinding[["beta"]]
NAS_reg_Blinding_tab <- NAS_reg_Blinding_tab[-c(1),]
NAS_reg_Blinding_tab <- NAS_reg_Blinding_tab[-c(1)]
NAS_reg_Blinding_tab$k <- NAS_reg_Blinding[["k"]]
NAS_reg_Blinding_tab$r2 <- NAS_reg_Blinding[["R2"]]
NAS_reg_Blinding_tab$var <- "Blinding"

NAS_reg_Power_calculation <- metareg(NAS_metan_full, Power_calculation)
NAS_reg_Power_calculation_tab <- data.frame(NAS_reg_Power_calculation[["beta"]])
NAS_reg_Power_calculation_tab$se <- NAS_reg_Power_calculation[["se"]]
NAS_reg_Power_calculation_tab$pval <- NAS_reg_Power_calculation[["pval"]]
NAS_reg_Power_calculation_tab$beta <- NAS_reg_Power_calculation[["beta"]]
NAS_reg_Power_calculation_tab <- NAS_reg_Power_calculation_tab[-c(1),]
NAS_reg_Power_calculation_tab <- NAS_reg_Power_calculation_tab[-c(1)]
NAS_reg_Power_calculation_tab$k <- NAS_reg_Power_calculation[["k"]]
NAS_reg_Power_calculation_tab$r2 <- NAS_reg_Power_calculation[["R2"]]
NAS_reg_Power_calculation_tab$var <- "Power_calculation"

NAS_reg_Chol_per <- metareg(NAS_metan_full, Chol_per)
NAS_reg_Chol_per_tab <- data.frame(NAS_reg_Chol_per[["beta"]])
NAS_reg_Chol_per_tab$se <- NAS_reg_Chol_per[["se"]]
NAS_reg_Chol_per_tab$pval <- NAS_reg_Chol_per[["pval"]]
NAS_reg_Chol_per_tab$beta <- NAS_reg_Chol_per[["beta"]]
NAS_reg_Chol_per_tab <- NAS_reg_Chol_per_tab[-c(1),]
NAS_reg_Chol_per_tab <- NAS_reg_Chol_per_tab[-c(1)]
NAS_reg_Chol_per_tab$k <- NAS_reg_Chol_per[["k"]]
NAS_reg_Chol_per_tab$r2 <- NAS_reg_Chol_per[["R2"]]
NAS_reg_Chol_per_tab$var <- "Chol_per"

NAS_reg_log_FructGluc_per <- metareg(NAS_metan_full, log_FructGluc_per)
NAS_reg_log_FructGluc_per_tab <- data.frame(NAS_reg_log_FructGluc_per[["beta"]])
NAS_reg_log_FructGluc_per_tab$se <- NAS_reg_log_FructGluc_per[["se"]]
NAS_reg_log_FructGluc_per_tab$pval <- NAS_reg_log_FructGluc_per[["pval"]]
NAS_reg_log_FructGluc_per_tab$beta <- NAS_reg_log_FructGluc_per[["beta"]]
NAS_reg_log_FructGluc_per_tab <- NAS_reg_log_FructGluc_per_tab[-c(1),]
NAS_reg_log_FructGluc_per_tab <- NAS_reg_log_FructGluc_per_tab[-c(1)]
NAS_reg_log_FructGluc_per_tab$k <- NAS_reg_log_FructGluc_per[["k"]]
NAS_reg_log_FructGluc_per_tab$r2 <- NAS_reg_log_FructGluc_per[["R2"]]
NAS_reg_log_FructGluc_per_tab$var <- "log_FructGluc_per"

NAS_reg_log_Sucr_kcal <- metareg(NAS_metan_full, log_Sucr_kcal)
NAS_reg_log_Sucr_kcal_tab <- data.frame(NAS_reg_log_Sucr_kcal[["beta"]])
NAS_reg_log_Sucr_kcal_tab$se <- NAS_reg_log_Sucr_kcal[["se"]]
NAS_reg_log_Sucr_kcal_tab$pval <- NAS_reg_log_Sucr_kcal[["pval"]]
NAS_reg_log_Sucr_kcal_tab$beta <- NAS_reg_log_Sucr_kcal[["beta"]]
NAS_reg_log_Sucr_kcal_tab <- NAS_reg_log_Sucr_kcal_tab[-c(1),]
NAS_reg_log_Sucr_kcal_tab <- NAS_reg_log_Sucr_kcal_tab[-c(1)]
NAS_reg_log_Sucr_kcal_tab$k <- NAS_reg_log_Sucr_kcal[["k"]]
NAS_reg_log_Sucr_kcal_tab$r2 <- NAS_reg_log_Sucr_kcal[["R2"]]
NAS_reg_log_Sucr_kcal_tab$var <- "log_Sucr_kcal"

NAS_reg_log_Fat_kcal <- metareg(NAS_metan_full, log_Fat_kcal)
NAS_reg_log_Fat_kcal_tab <- data.frame(NAS_reg_log_Fat_kcal[["beta"]])
NAS_reg_log_Fat_kcal_tab$se <- NAS_reg_log_Fat_kcal[["se"]]
NAS_reg_log_Fat_kcal_tab$pval <- NAS_reg_log_Fat_kcal[["pval"]]
NAS_reg_log_Fat_kcal_tab$beta <- NAS_reg_log_Fat_kcal[["beta"]]
NAS_reg_log_Fat_kcal_tab <- NAS_reg_log_Fat_kcal_tab[-c(1),]
NAS_reg_log_Fat_kcal_tab <- NAS_reg_log_Fat_kcal_tab[-c(1)]
NAS_reg_log_Fat_kcal_tab$k <- NAS_reg_log_Fat_kcal[["k"]]
NAS_reg_log_Fat_kcal_tab$r2 <- NAS_reg_log_Fat_kcal[["R2"]]
NAS_reg_log_Fat_kcal_tab$var <- "log_Fat_kcal"

NAS_reg_log_Age_start <- metareg(NAS_metan_full, log_Age_start)
NAS_reg_log_Age_start_tab <- data.frame(NAS_reg_log_Age_start[["beta"]])
NAS_reg_log_Age_start_tab$se <- NAS_reg_log_Age_start[["se"]]
NAS_reg_log_Age_start_tab$pval <- NAS_reg_log_Age_start[["pval"]]
NAS_reg_log_Age_start_tab$beta <- NAS_reg_log_Age_start[["beta"]]
NAS_reg_log_Age_start_tab <- NAS_reg_log_Age_start_tab[-c(1),]
NAS_reg_log_Age_start_tab <- NAS_reg_log_Age_start_tab[-c(1)]
NAS_reg_log_Age_start_tab$k <- NAS_reg_log_Age_start[["k"]]
NAS_reg_log_Age_start_tab$r2 <- NAS_reg_log_Age_start[["R2"]]
NAS_reg_log_Age_start_tab$var <- "log_Age_start"

NAS_reg_log_Duration <- metareg(NAS_metan_full, log_Duration)
NAS_reg_log_Duration_tab <- data.frame(NAS_reg_log_Duration[["beta"]])
NAS_reg_log_Duration_tab$se <- NAS_reg_log_Duration[["se"]]
NAS_reg_log_Duration_tab$pval <- NAS_reg_log_Duration[["pval"]]
NAS_reg_log_Duration_tab$beta <- NAS_reg_log_Duration[["beta"]]
NAS_reg_log_Duration_tab <- NAS_reg_log_Duration_tab[-c(1),]
NAS_reg_log_Duration_tab <- NAS_reg_log_Duration_tab[-c(1)]
NAS_reg_log_Duration_tab$k <- NAS_reg_log_Duration[["k"]]
NAS_reg_log_Duration_tab$r2 <- NAS_reg_log_Duration[["R2"]]
NAS_reg_log_Duration_tab$var <- "log_Duration"

NAS_reg_log_Age_end <- metareg(NAS_metan_full, log_Age_end)
NAS_reg_log_Age_end_tab <- data.frame(NAS_reg_log_Age_end[["beta"]])
NAS_reg_log_Age_end_tab$se <- NAS_reg_log_Age_end[["se"]]
NAS_reg_log_Age_end_tab$pval <- NAS_reg_log_Age_end[["pval"]]
NAS_reg_log_Age_end_tab$beta <- NAS_reg_log_Age_end[["beta"]]
NAS_reg_log_Age_end_tab <- NAS_reg_log_Age_end_tab[-c(1),]
NAS_reg_log_Age_end_tab <- NAS_reg_log_Age_end_tab[-c(1)]
NAS_reg_log_Age_end_tab$k <- NAS_reg_log_Age_end[["k"]]
NAS_reg_log_Age_end_tab$r2 <- NAS_reg_log_Age_end[["R2"]]
NAS_reg_log_Age_end_tab$var <- "log_Age_end"

NAS_reg_log_Wt_change <- metareg(NAS_metan_full, log_Wt_change)
NAS_reg_log_Wt_change_tab <- data.frame(NAS_reg_log_Wt_change[["beta"]])
NAS_reg_log_Wt_change_tab$se <- NAS_reg_log_Wt_change[["se"]]
NAS_reg_log_Wt_change_tab$pval <- NAS_reg_log_Wt_change[["pval"]]
NAS_reg_log_Wt_change_tab$beta <- NAS_reg_log_Wt_change[["beta"]]
NAS_reg_log_Wt_change_tab <- NAS_reg_log_Wt_change_tab[-c(1),]
NAS_reg_log_Wt_change_tab <- NAS_reg_log_Wt_change_tab[-c(1)]
NAS_reg_log_Wt_change_tab$k <- NAS_reg_log_Wt_change[["k"]]
NAS_reg_log_Wt_change_tab$r2 <- NAS_reg_log_Wt_change[["R2"]]
NAS_reg_log_Wt_change_tab$var <- "log_Wt_change"

NAS_reg_log_Gluc_change <- metareg(NAS_metan_full, log_Gluc_change)
NAS_reg_log_Gluc_change_tab <- data.frame(NAS_reg_log_Gluc_change[["beta"]])
NAS_reg_log_Gluc_change_tab$se <- NAS_reg_log_Gluc_change[["se"]]
NAS_reg_log_Gluc_change_tab$pval <- NAS_reg_log_Gluc_change[["pval"]]
NAS_reg_log_Gluc_change_tab$beta <- NAS_reg_log_Gluc_change[["beta"]]
NAS_reg_log_Gluc_change_tab <- NAS_reg_log_Gluc_change_tab[-c(1),]
NAS_reg_log_Gluc_change_tab <- NAS_reg_log_Gluc_change_tab[-c(1)]
NAS_reg_log_Gluc_change_tab$k <- NAS_reg_log_Gluc_change[["k"]]
NAS_reg_log_Gluc_change_tab$r2 <- NAS_reg_log_Gluc_change[["R2"]]
NAS_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

NAS_reg_log_Insul_change <- metareg(NAS_metan_full, log_Insul_change)
NAS_reg_log_Insul_change_tab <- data.frame(NAS_reg_log_Insul_change[["beta"]])
NAS_reg_log_Insul_change_tab$se <- NAS_reg_log_Insul_change[["se"]]
NAS_reg_log_Insul_change_tab$pval <- NAS_reg_log_Insul_change[["pval"]]
NAS_reg_log_Insul_change_tab$beta <- NAS_reg_log_Insul_change[["beta"]]
NAS_reg_log_Insul_change_tab <- NAS_reg_log_Insul_change_tab[-c(1),]
NAS_reg_log_Insul_change_tab <- NAS_reg_log_Insul_change_tab[-c(1)]
NAS_reg_log_Insul_change_tab$k <- NAS_reg_log_Insul_change[["k"]]
NAS_reg_log_Insul_change_tab$r2 <- NAS_reg_log_Insul_change[["R2"]]
NAS_reg_log_Insul_change_tab$var <- "log_Insul_change"

NAS_reg_Sex <- metareg(NAS_metan_full, Sex)
NAS_reg_Sex_tab <- data.frame(NAS_reg_Sex[["beta"]])
NAS_reg_Sex_tab$se <- NAS_reg_Sex[["se"]]
NAS_reg_Sex_tab$pval <- NAS_reg_Sex[["pval"]]
NAS_reg_Sex_tab$beta <- NAS_reg_Sex[["beta"]]
NAS_reg_Sex_tab <- NAS_reg_Sex_tab[-c(1),]
NAS_reg_Sex_tab <- NAS_reg_Sex_tab[-c(1)]
NAS_reg_Sex_tab$k <- NAS_reg_Sex[["k"]]
NAS_reg_Sex_tab$r2 <- NA
NAS_reg_Sex_tab$var <- rownames(NAS_reg_Sex_tab)
NAS_reg_Sex_overall_tab <- data.frame(NAS_reg_Sex[["QMp"]])
NAS_reg_Sex_overall_tab$se <- NA
NAS_reg_Sex_overall_tab$pval <- NAS_reg_Sex[["QMp"]]
NAS_reg_Sex_overall_tab$beta <- NA
NAS_reg_Sex_overall_tab <- NAS_reg_Sex_overall_tab[-c(1)]
NAS_reg_Sex_overall_tab$k <- NAS_reg_Sex[["k"]]
NAS_reg_Sex_overall_tab$r2 <- NAS_reg_Sex[["R2"]]
NAS_reg_Sex_overall_tab$var <- "Sex_overall"
NAS_reg_Sex_tab <- rbind(NAS_reg_Sex_tab, NAS_reg_Sex_overall_tab)

NAS_reg_Drug_dose <- metareg(NAS_metan_drugIndiv, Drug_dose)
NAS_reg_Drug_dose_tab <- data.frame(NAS_reg_Drug_dose[["beta"]])
NAS_reg_Drug_dose_tab$se <- NAS_reg_Drug_dose[["se"]]
NAS_reg_Drug_dose_tab$pval <- NAS_reg_Drug_dose[["pval"]]
NAS_reg_Drug_dose_tab$beta <- NAS_reg_Drug_dose[["beta"]]
NAS_reg_Drug_dose_tab <- NAS_reg_Drug_dose_tab[-c(1),]
NAS_reg_Drug_dose_tab <- NAS_reg_Drug_dose_tab[-c(1)]
NAS_reg_Drug_dose_tab$k <- NAS_reg_Drug_dose[["k"]]
NAS_reg_Drug_dose_tab$r2 <- NAS_reg_Drug_dose[["R2"]]
NAS_reg_Drug_dose_tab$var <- "Drug_dose"

NAS_reg_Indiv_drug_class_3 <- metareg(NAS_metan_drugIndiv, Indiv_drug_class_3)
NAS_reg_Indiv_drug_class_3_tab <- data.frame(NAS_reg_Indiv_drug_class_3[["beta"]])
NAS_reg_Indiv_drug_class_3_tab$se <- NAS_reg_Indiv_drug_class_3[["se"]]
NAS_reg_Indiv_drug_class_3_tab$pval <- NAS_reg_Indiv_drug_class_3[["pval"]]
NAS_reg_Indiv_drug_class_3_tab$beta <- NAS_reg_Indiv_drug_class_3[["beta"]]
NAS_reg_Indiv_drug_class_3_tab <- NAS_reg_Indiv_drug_class_3_tab[-c(1),]
NAS_reg_Indiv_drug_class_3_tab <- NAS_reg_Indiv_drug_class_3_tab[-c(1)]
NAS_reg_Indiv_drug_class_3_tab$k <- NAS_reg_Indiv_drug_class_3[["k"]]
NAS_reg_Indiv_drug_class_3_tab$r2 <- NA
NAS_reg_Indiv_drug_class_3_tab$var <- rownames(NAS_reg_Indiv_drug_class_3_tab)
NAS_reg_Indiv_drug_class_3_overall_tab <- data.frame(NAS_reg_Indiv_drug_class_3[["QMp"]])
NAS_reg_Indiv_drug_class_3_overall_tab$se <- NA
NAS_reg_Indiv_drug_class_3_overall_tab$pval <- NAS_reg_Indiv_drug_class_3[["QMp"]]
NAS_reg_Indiv_drug_class_3_overall_tab$beta <- NA
NAS_reg_Indiv_drug_class_3_overall_tab <- NAS_reg_Indiv_drug_class_3_overall_tab[-c(1)]
NAS_reg_Indiv_drug_class_3_overall_tab$k <- NAS_reg_Indiv_drug_class_3[["k"]]
NAS_reg_Indiv_drug_class_3_overall_tab$r2 <- NAS_reg_Indiv_drug_class_3[["R2"]]
NAS_reg_Indiv_drug_class_3_overall_tab$var <- "Indiv_drug_class_3_overall"
NAS_reg_Indiv_drug_class_3_tab <- rbind(NAS_reg_Indiv_drug_class_3_tab, NAS_reg_Indiv_drug_class_3_overall_tab)

NAS_reg_Model_simple <- metareg(NAS_metan_model, Model_simple)
NAS_reg_Model_simple_tab <- data.frame(NAS_reg_Model_simple[["beta"]])
NAS_reg_Model_simple_tab$se <- NAS_reg_Model_simple[["se"]]
NAS_reg_Model_simple_tab$pval <- NAS_reg_Model_simple[["pval"]]
NAS_reg_Model_simple_tab$beta <- NAS_reg_Model_simple[["beta"]]
NAS_reg_Model_simple_tab <- NAS_reg_Model_simple_tab[-c(1),]
NAS_reg_Model_simple_tab <- NAS_reg_Model_simple_tab[-c(1)]
NAS_reg_Model_simple_tab$k <- NAS_reg_Model_simple[["k"]]
NAS_reg_Model_simple_tab$r2 <- NA
NAS_reg_Model_simple_tab$var <- rownames(NAS_reg_Model_simple_tab)
NAS_reg_Model_simple_overall_tab <- data.frame(NAS_reg_Model_simple[["QMp"]])
NAS_reg_Model_simple_overall_tab$se <- NA
NAS_reg_Model_simple_overall_tab$pval <- NAS_reg_Model_simple[["QMp"]]
NAS_reg_Model_simple_overall_tab$beta <- NA
NAS_reg_Model_simple_overall_tab <- NAS_reg_Model_simple_overall_tab[-c(1)]
NAS_reg_Model_simple_overall_tab$k <- NAS_reg_Model_simple[["k"]]
NAS_reg_Model_simple_overall_tab$r2 <- NAS_reg_Model_simple[["R2"]]
NAS_reg_Model_simple_overall_tab$var <- "Model_simple_overall"
NAS_reg_Model_simple_tab <- rbind(NAS_reg_Model_simple_tab, NAS_reg_Model_simple_overall_tab)

NAS_reg_Background_simple <- metareg(NAS_metan_bg, Background_simple)
NAS_reg_Background_simple_tab <- data.frame(NAS_reg_Background_simple[["beta"]])
NAS_reg_Background_simple_tab$se <- NAS_reg_Background_simple[["se"]]
NAS_reg_Background_simple_tab$pval <- NAS_reg_Background_simple[["pval"]]
NAS_reg_Background_simple_tab$beta <- NAS_reg_Background_simple[["beta"]]
NAS_reg_Background_simple_tab <- NAS_reg_Background_simple_tab[-c(1),]
NAS_reg_Background_simple_tab <- NAS_reg_Background_simple_tab[-c(1)]
NAS_reg_Background_simple_tab$k <- NAS_reg_Background_simple[["k"]]
NAS_reg_Background_simple_tab$r2 <- NA
NAS_reg_Background_simple_tab$var <- rownames(NAS_reg_Background_simple_tab)
NAS_reg_Background_simple_overall_tab <- data.frame(NAS_reg_Background_simple[["QMp"]])
NAS_reg_Background_simple_overall_tab$se <- NA
NAS_reg_Background_simple_overall_tab$pval <- NAS_reg_Background_simple[["QMp"]]
NAS_reg_Background_simple_overall_tab$beta <- NA
NAS_reg_Background_simple_overall_tab <- NAS_reg_Background_simple_overall_tab[-c(1)]
NAS_reg_Background_simple_overall_tab$k <- NAS_reg_Background_simple[["k"]]
NAS_reg_Background_simple_overall_tab$r2 <- NAS_reg_Background_simple[["R2"]]
NAS_reg_Background_simple_overall_tab$var <- "Background_simple_overall"
NAS_reg_Background_simple_tab <- rbind(NAS_reg_Background_simple_tab, NAS_reg_Background_simple_overall_tab)

NAS_metareg_sumtab <- rbind(NAS_reg_Qual_score_tab, NAS_reg_Protocol_tab, NAS_reg_Randomisation_tab, NAS_reg_Blinding_tab, NAS_reg_Power_calculation_tab, NAS_reg_Chol_per_tab, NAS_reg_log_FructGluc_per_tab, NAS_reg_log_Sucr_kcal_tab, NAS_reg_log_Fat_kcal_tab, NAS_reg_log_Age_start_tab, NAS_reg_log_Duration_tab, NAS_reg_log_Age_end_tab, NAS_reg_log_Wt_change_tab, NAS_reg_log_Gluc_change_tab, NAS_reg_log_Insul_change_tab, NAS_reg_Sex_tab, NAS_reg_Drug_dose_tab, NAS_reg_Indiv_drug_class_3_tab, NAS_reg_Model_simple_tab, NAS_reg_Background_simple_tab)

NAS_metareg_sumtab$text <- paste(format(round(NAS_metareg_sumtab$beta, 1), nsmall = 1), format(round(NAS_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
NAS_metareg_sumtab$text <- paste(NAS_metareg_sumtab$text, "", sep = ")", collapse = NULL)
NAS_metareg_sumtab$pval_2dig <- paste((signif(NAS_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
NAS_metareg_sumtab$r2_2dig <- paste(format(round(NAS_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(NAS_metareg_sumtab,file="NAS_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="NAS_bubble_Wt_change.pdf",width=6,height=6)
NAS_bubble_Wt_change <- bubble(NAS_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in NAFLD Activity Score", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
NAS_bubble_Wt_change
dev.off()

pdf(file="NAS_bubble_Gluc_change.pdf",width=6,height=6)
NAS_bubble_Gluc_change <- bubble(NAS_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in NAFLD Activity Score", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
NAS_bubble_Gluc_change
dev.off()


##########

##### run multiple meta-regression

## create data subset including >3 for each model >3 for background, and >3 for each drug

## start with dataset containing >3 for each background = NAS_data_min3bg

NAS_data_min3bg_modelcounts <- NAS_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
NAS_data_min3bg_modelcounts_sum <- NAS_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

NAS_data_min3bg_model_less3 = subset(NAS_data_min3bg_modelcounts_sum, n <3)
NAS_data_min3bg_model_less3$Model_simple <- droplevels(NAS_data_min3bg_model_less3$Model_simple)
NAS_data_min3bg_model_droplist <- NAS_data_min3bg_model_less3$Model_simple

NAS_multimetareg_data <- NAS_data_min3bg %>% filter(!Model_simple %in% NAS_data_min3bg_model_droplist)



## run multiple meta-regression

## create data subset including >3 for each model and >3 for background

## start with dataset containing >3 for each background = NAS_data_min3bg

NAS_data_min3bg_modelcounts <- NAS_data_min3bg %>% group_by(Model_simple, Study) %>% summarise(n = n())
NAS_data_min3bg_modelcounts_sum <- NAS_data_min3bg_modelcounts %>% group_by(Model_simple) %>% summarise(n = n())

NAS_data_min3bg_model_less3 = subset(NAS_data_min3bg_modelcounts_sum, n <3)
NAS_data_min3bg_model_less3$Model_simple <- droplevels(NAS_data_min3bg_model_less3$Model_simple)
NAS_data_min3bg_model_droplist <- NAS_data_min3bg_model_less3$Model_simple

NAS_multimetareg_data <- NAS_data_min3bg %>% filter(!Model_simple %in% NAS_data_min3bg_model_droplist)

## Run metan

NAS_multimetareg_metan <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_multimetareg_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")


library(metafor)

NAS_multmetareg_tab <- data.frame(NAS_multimetareg_metan$studlab)
NAS_multmetareg_tab$yi <- NAS_multimetareg_metan[["TE"]]
NAS_multmetareg_tab$sei <- NAS_multimetareg_metan[["seTE"]]
NAS_multmetareg_tab$Model_simple <- NAS_multimetareg_metan[["data"]][["Model_simple"]]
NAS_multmetareg_tab$Background_simple <- NAS_multimetareg_metan[["data"]][["Background_simple"]]
NAS_multmetareg_tab$Sex <- NAS_multimetareg_metan[["data"]][["Sex"]]
NAS_multmetareg_tab$Indiv_drug_class_3 <- NAS_multimetareg_metan[["data"]][["Indiv_drug_class_3"]]
NAS_multmetareg_tab$log_Fat_kcal <- NAS_multimetareg_metan[["data"]][["log_Fat_kcal"]]
NAS_multmetareg_tab$log_Age_start <- NAS_multimetareg_metan[["data"]][["log_Age_start"]]
NAS_multmetareg_tab$log_Age_end <- NAS_multimetareg_metan[["data"]][["log_Age_end"]]
NAS_multmetareg_tab$log_Duration <- NAS_multimetareg_metan[["data"]][["log_Duration"]]
NAS_multmetareg_tab$log_Wt_change <- NAS_multimetareg_metan[["data"]][["log_Wt_change"]]
NAS_multmetareg_tab$log_Gluc_change <- NAS_multimetareg_metan[["data"]][["log_Gluc_change"]]
NAS_multmetareg_tab$log_Insul_change <- NAS_multimetareg_metan[["data"]][["log_Insul_change"]]
NAS_multmetareg_tab$Qual_score <- NAS_multimetareg_metan[["data"]][["Qual_score"]]

NAS_multmetareg_tab_cor <- cor(NAS_multmetareg_tab[,8:15], use="complete.obs")
NAS_multmetareg_tab_cor

library(PerformanceAnalytics)
chart.Correlation(NAS_multmetareg_tab[,8:15], use="complete.obs")

## high correlation between age_start, age,_end, and duration, therefore drop age_end from model

## also have to drop insulin change due to insufficient data

library(dmetar)

NAS_multi_intereference1 <- multimodel.inference(TE = "yi", seTE = "sei", data = NAS_multmetareg_tab, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Duration", "log_Wt_change", "Qual_score", "log_Gluc_change", "Model_simple", "Background_simple"), interaction = FALSE)
NAS_multi_intereference1

sink("NAS_multi_intereference1.txt")
print(NAS_multi_intereference1)
sink()

## run multi-metareg for top model 1

NAS_multmetareg_1 <- rma(yi = yi, sei = sei, data = NAS_multmetareg_tab, method = "ML", mods = ~ log_Fat_kcal + Sex + log_Wt_change + Background_simple + log_Age_start + log_Gluc_change, test="knha")

NAS_multmetareg_1_tab <- coef(summary(NAS_multmetareg_1))
NAS_multmetareg_1_tab$rownames <- rownames(NAS_multmetareg_1_tab)

NAS_multmetareg_1_tab$mod1_text <- paste(format(round(NAS_multmetareg_1_tab$estimate, 1), nsmall = 1), format(round(NAS_multmetareg_1_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
NAS_multmetareg_1_tab$mod1_text <- paste(NAS_multmetareg_1_tab$mod1_text, "", sep = ")", collapse = NULL)
NAS_multmetareg_1_tab$mod1_pval_2dig <- paste((signif(NAS_multmetareg_1_tab$pval, digits=2)), "", sep = "", collapse = NULL)

## check robustness using permutation test

NAS_multmetareg_1_permut <- permutest(NAS_multmetareg_1)

sink("NAS_multmetareg_1_permut.txt")
print(NAS_multmetareg_1_permut)
sink()


####

## repeat but also include drug class in model, therefore drop where <3 unique studies for any drug class
## insufficient data to do by individual drug

NAS_multimetareg_data_drugcounts <- NAS_multimetareg_data %>% group_by(Drug_Class_new_1_all, Study) %>% summarise(n = n())
NAS_multimetareg_data_drugcounts_sum <- NAS_multimetareg_data_drugcounts %>% group_by(Drug_Class_new_1_all) %>% summarise(n = n())

NAS_multimetareg_data_drugcounts_less3 = subset(NAS_multimetareg_data_drugcounts_sum, n <3)
NAS_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all <- droplevels(NAS_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all)
NAS_multimetareg_data_drug_droplist <- NAS_multimetareg_data_drugcounts_less3$Drug_Class_new_1_all

NAS_multimetareg_data_2 <- NAS_multimetareg_data %>% filter(!Drug_Class_new_1_all %in% NAS_multimetareg_data_drug_droplist)


## Run metan

NAS_multimetareg_metan_2 <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_multimetareg_data_2, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

library(metafor)

NAS_multmetareg_tab_2 <- data.frame(NAS_multimetareg_metan_2$studlab)
NAS_multmetareg_tab_2$yi <- NAS_multimetareg_metan_2[["TE"]]
NAS_multmetareg_tab_2$sei <- NAS_multimetareg_metan_2[["seTE"]]
NAS_multmetareg_tab_2$Model_simple <- NAS_multimetareg_metan_2[["data"]][["Model_simple"]]
NAS_multmetareg_tab_2$Background_simple <- NAS_multimetareg_metan_2[["data"]][["Background_simple"]]
NAS_multmetareg_tab_2$Sex <- NAS_multimetareg_metan_2[["data"]][["Sex"]]
NAS_multmetareg_tab_2$Drug_Class_new_1_all <- NAS_multimetareg_metan_2[["data"]][["Drug_Class_new_1_all"]]
NAS_multmetareg_tab_2$log_Fat_kcal <- NAS_multimetareg_metan_2[["data"]][["log_Fat_kcal"]]
NAS_multmetareg_tab_2$log_Age_start <- NAS_multimetareg_metan_2[["data"]][["log_Age_start"]]
NAS_multmetareg_tab_2$log_Age_end <- NAS_multimetareg_metan_2[["data"]][["log_Age_end"]]
NAS_multmetareg_tab_2$log_Duration <- NAS_multimetareg_metan_2[["data"]][["log_Duration"]]
NAS_multmetareg_tab_2$log_Wt_change <- NAS_multimetareg_metan_2[["data"]][["log_Wt_change"]]
NAS_multmetareg_tab_2$log_Gluc_change <- NAS_multimetareg_metan_2[["data"]][["log_Gluc_change"]]
NAS_multmetareg_tab_2$log_Insul_change <- NAS_multimetareg_metan_2[["data"]][["log_Insul_change"]]
NAS_multmetareg_tab_2$Qual_score <- NAS_multimetareg_metan_2[["data"]][["Qual_score"]]

NAS_multmetareg_tab_2_cor <- cor(NAS_multmetareg_tab_2[,8:15], use="complete.obs")
NAS_multmetareg_tab_2_cor

library(PerformanceAnalytics)
chart.Correlation(NAS_multmetareg_tab_2[,8:15], use="complete.obs")

## high correlation between age_start, age,_end, and duration, therefore drop age_end from model, as well as previous redundant mods (age, duration, qual score), also had to remove glucose

library(dmetar)

NAS_multi_intereference2 <- multimodel.inference(TE = "yi", seTE = "sei", data = NAS_multmetareg_tab_2, predictors = c("log_Fat_kcal", "Sex", "log_Age_start", "log_Wt_change", "Background_simple", "Drug_Class_new_1_all"), interaction = FALSE)
NAS_multi_intereference2


## run multi-metareg for top model

NAS_multmetareg_2 <- rma(yi = yi, sei = sei, data = NAS_multmetareg_tab_2, method = "ML", mods = ~ Background_simple + log_Fat_kcal + log_Wt_change, test="knha")

NAS_multmetareg_2_tab <- coef(summary(NAS_multmetareg_2))
NAS_multmetareg_2_tab$rownames <- rownames(NAS_multmetareg_2_tab)

NAS_multmetareg_2_tab$mod2_text <- paste(format(round(NAS_multmetareg_2_tab$estimate, 1), nsmall = 1), format(round(NAS_multmetareg_2_tab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
NAS_multmetareg_2_tab$mod2_text <- paste(NAS_multmetareg_2_tab$mod2_text, "", sep = ")", collapse = NULL)
NAS_multmetareg_2_tab$mod2_pval_2dig <- paste((signif(NAS_multmetareg_2_tab$pval, digits=2)), "", sep = "", collapse = NULL)

NAS_multmetareg_sumtab <- merge(NAS_multmetareg_1_tab, NAS_multmetareg_2_tab, by="rownames", all=TRUE)
write.table(NAS_multmetareg_sumtab, "NAS_multmetareg_sumtab.csv", sep=",")

## check robustness using permutation test

NAS_multmetareg_2_permut <- permutest(NAS_multmetareg_2)

sink("NAS_multmetareg_2_permut.txt")
print(NAS_multmetareg_2_permut)
sink()



## See if meta-regression results change after removal of weight-loss diets

library(tidyverse)

NAS_NoWtLoss_data <- NAS_data %>% filter(Model_simple != 'Leptin Receptor Deficiency (db/db) + MCD' & Model_simple != 'MCD + HFD (MCDHF)' & Model_simple != 'Methionine and choline deficient diet / MCD' & Model_simple != 'Orotic Acid' & Model_simple != 'Otsuka Long-Evans Tokushima Fatty (OLETF) rat + MCD' & Model_simple != 'KK-Ay + Methionine and choline deficient diet / MCD' & Model_simple != 'LDL receptor knockout (LDLR-KO) + Modified choline-deficient amino acid-defined (mCDAA) diet' & Model_simple != 'CDAA + HFD (CDAHFD)' & Model_simple != 'Choline deficient diet' & Model_simple != 'Choline deficient HFD' & Model_simple != 'Choline-deficient L-amino-defined diet / CDAA' & Model_simple != 'U8-HKO + Choline deficient HFD')


NAS_NoWtLoss_metan_full <- metacont(NAS_Int_size, NAS_Int_Mean, NAS_Int_SD, NAS_Pla_size, NAS_Pla_Mean, NAS_Pla_SD, data = NAS_NoWtLoss_data, studlab = paste(Paper), comb.fixed = FALSE, comb.random = TRUE, method.tau = "SJ", hakn = TRUE, prediction = TRUE, sm = "MD")

NAS_NoWtLoss_reg_log_Wt_change <- metareg(NAS_NoWtLoss_metan_full, log_Wt_change)
NAS_NoWtLoss_reg_log_Wt_change_tab <- data.frame(NAS_NoWtLoss_reg_log_Wt_change[["beta"]])
NAS_NoWtLoss_reg_log_Wt_change_tab$se <- NAS_NoWtLoss_reg_log_Wt_change[["se"]]
NAS_NoWtLoss_reg_log_Wt_change_tab$pval <- NAS_NoWtLoss_reg_log_Wt_change[["pval"]]
NAS_NoWtLoss_reg_log_Wt_change_tab$beta <- NAS_NoWtLoss_reg_log_Wt_change[["beta"]]
NAS_NoWtLoss_reg_log_Wt_change_tab <- NAS_NoWtLoss_reg_log_Wt_change_tab[-c(1),]
NAS_NoWtLoss_reg_log_Wt_change_tab <- NAS_NoWtLoss_reg_log_Wt_change_tab[-c(1)]
NAS_NoWtLoss_reg_log_Wt_change_tab$k <- NAS_NoWtLoss_reg_log_Wt_change[["k"]]
NAS_NoWtLoss_reg_log_Wt_change_tab$r2 <- NAS_NoWtLoss_reg_log_Wt_change[["R2"]]
NAS_NoWtLoss_reg_log_Wt_change_tab$var <- "log_Wt_change"

NAS_NoWtLoss_reg_log_Gluc_change <- metareg(NAS_NoWtLoss_metan_full, log_Gluc_change)
NAS_NoWtLoss_reg_log_Gluc_change_tab <- data.frame(NAS_NoWtLoss_reg_log_Gluc_change[["beta"]])
NAS_NoWtLoss_reg_log_Gluc_change_tab$se <- NAS_NoWtLoss_reg_log_Gluc_change[["se"]]
NAS_NoWtLoss_reg_log_Gluc_change_tab$pval <- NAS_NoWtLoss_reg_log_Gluc_change[["pval"]]
NAS_NoWtLoss_reg_log_Gluc_change_tab$beta <- NAS_NoWtLoss_reg_log_Gluc_change[["beta"]]
NAS_NoWtLoss_reg_log_Gluc_change_tab <- NAS_NoWtLoss_reg_log_Gluc_change_tab[-c(1),]
NAS_NoWtLoss_reg_log_Gluc_change_tab <- NAS_NoWtLoss_reg_log_Gluc_change_tab[-c(1)]
NAS_NoWtLoss_reg_log_Gluc_change_tab$k <- NAS_NoWtLoss_reg_log_Gluc_change[["k"]]
NAS_NoWtLoss_reg_log_Gluc_change_tab$r2 <- NAS_NoWtLoss_reg_log_Gluc_change[["R2"]]
NAS_NoWtLoss_reg_log_Gluc_change_tab$var <- "log_Gluc_change"

NAS_NoWtLoss_reg_log_Insul_change <- metareg(NAS_NoWtLoss_metan_full, log_Insul_change)
NAS_NoWtLoss_reg_log_Insul_change_tab <- data.frame(NAS_NoWtLoss_reg_log_Insul_change[["beta"]])
NAS_NoWtLoss_reg_log_Insul_change_tab$se <- NAS_NoWtLoss_reg_log_Insul_change[["se"]]
NAS_NoWtLoss_reg_log_Insul_change_tab$pval <- NAS_NoWtLoss_reg_log_Insul_change[["pval"]]
NAS_NoWtLoss_reg_log_Insul_change_tab$beta <- NAS_NoWtLoss_reg_log_Insul_change[["beta"]]
NAS_NoWtLoss_reg_log_Insul_change_tab <- NAS_NoWtLoss_reg_log_Insul_change_tab[-c(1),]
NAS_NoWtLoss_reg_log_Insul_change_tab <- NAS_NoWtLoss_reg_log_Insul_change_tab[-c(1)]
NAS_NoWtLoss_reg_log_Insul_change_tab$k <- NAS_NoWtLoss_reg_log_Insul_change[["k"]]
NAS_NoWtLoss_reg_log_Insul_change_tab$r2 <- NAS_NoWtLoss_reg_log_Insul_change[["R2"]]
NAS_NoWtLoss_reg_log_Insul_change_tab$var <- "log_Insul_change"

NAS_NoWtLoss_metareg_sumtab <- rbind(NAS_NoWtLoss_reg_log_Wt_change_tab, NAS_NoWtLoss_reg_log_Gluc_change_tab, NAS_NoWtLoss_reg_log_Insul_change_tab)

NAS_NoWtLoss_metareg_sumtab$text <- paste(format(round(NAS_NoWtLoss_metareg_sumtab$beta, 1), nsmall = 1), format(round(NAS_NoWtLoss_metareg_sumtab$se, 1), nsmall = 1), sep = " (", collapse = NULL)
NAS_NoWtLoss_metareg_sumtab$text <- paste(NAS_NoWtLoss_metareg_sumtab$text, "", sep = ")", collapse = NULL)
NAS_NoWtLoss_metareg_sumtab$pval_2dig <- paste((signif(NAS_NoWtLoss_metareg_sumtab$pval, digits=2)), "", sep = "", collapse = NULL)
NAS_NoWtLoss_metareg_sumtab$r2_2dig <- paste(format(round(NAS_NoWtLoss_metareg_sumtab$r2, 1), nsmall = 1), "", sep = "", collapse = NULL)

write.table(NAS_NoWtLoss_metareg_sumtab,file="NAS_NoWtLoss_metareg_sumtab.csv",sep=",")

## make relevant bubble plots

pdf(file="NAS_NoWtLoss_bubble_weight_change.pdf",width=6,height=6)
NAS_NoWtLoss_bubble_weight_change <- bubble(NAS_NoWtLoss_reg_log_Wt_change, xlab = "Log weight difference intervention/placebo", ylab = "Mean difference in NAFLD Activity Score (NAS)", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
NAS_NoWtLoss_bubble_weight_change
dev.off()

pdf(file="NAS_NoWtLoss_bubble_gluc_change.pdf",width=6,height=6)
NAS_NoWtLoss_bubble_gluc_change <- bubble(NAS_NoWtLoss_reg_log_Gluc_change, xlab = "Log fasting glucose difference intervention/placebo", ylab = "Mean difference in NAFLD Activity Score (NAS)", col.line = "blue", lwd = 3, studlab = FALSE, box = FALSE, pos.studlab = 4, offset = 1.5)
NAS_NoWtLoss_bubble_weight_change
dev.off()


##########

## Make summary heatmap of meta-regression results across multiple traits

library(pheatmap)
library(gtools)

TG_metareg_sumtab$TG_beta <- TG_metareg_sumtab$beta
Stea_metareg_sumtab$Stea_beta <- Stea_metareg_sumtab$beta
LobIn_metareg_sumtab$LobIn_beta <- LobIn_metareg_sumtab$beta
Bal_metareg_sumtab$Bal_beta <- Bal_metareg_sumtab$beta
Fib_metareg_sumtab$Fib_beta <- Fib_metareg_sumtab$beta
NAS_metareg_sumtab$NAS_beta <- NAS_metareg_sumtab$beta
metareg_hm_tab = as.data.frame(TG_metareg_sumtab$var)
metareg_hm_tab <- metareg_hm_tab %>% rename(var = "TG_metareg_sumtab$var")
metareg_hm_tab <- merge(metareg_hm_tab, TG_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab <- merge(metareg_hm_tab, Stea_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab <- merge(metareg_hm_tab, LobIn_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab <- merge(metareg_hm_tab, Bal_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab <- merge(metareg_hm_tab, Fib_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab <- merge(metareg_hm_tab, NAS_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab <- subset(metareg_hm_tab, select = c("TG_beta","Stea_beta","LobIn_beta","Bal_beta","Fib_beta","NAS_beta","var"))
metareg_hm_tab <- metareg_hm_tab %>% filter(var == "Chol_per" | var == "Drug_dose" | var == "log_Age_end" | var == "log_Age_start" | var == "log_Duration" | var == "log_Fat_kcal" | var == "log_FructGluc_per" | var == "log_Gluc_change" | var == "log_Insul_change" | var == "log_Wt_change" | var == "log_Sucr_kcal" | var == "Qual_score")
metareg_hm_tab[1:6] <- lapply(metareg_hm_tab[1:6], function(x) c(scale(x)))
rownames(metareg_hm_tab) = metareg_hm_tab[,7]
metareg_hm_tab <- metareg_hm_tab[ order(row.names(metareg_hm_tab)), ]

TG_metareg_sumtab$TG_pval <- TG_metareg_sumtab$pval
Stea_metareg_sumtab$Stea_pval <- Stea_metareg_sumtab$pval
LobIn_metareg_sumtab$LobIn_pval <- LobIn_metareg_sumtab$pval
Bal_metareg_sumtab$Bal_pval <- Bal_metareg_sumtab$pval
Fib_metareg_sumtab$Fib_pval <- Fib_metareg_sumtab$pval
NAS_metareg_sumtab$NAS_pval <- NAS_metareg_sumtab$pval
metareg_hm_tab_pval = as.data.frame(TG_metareg_sumtab$var)
metareg_hm_tab_pval <- metareg_hm_tab_pval %>% rename(var = "TG_metareg_sumtab$var")
metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, TG_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, Stea_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, LobIn_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, Bal_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, Fib_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab_pval <- merge(metareg_hm_tab_pval, NAS_metareg_sumtab, by="var", all=TRUE)
metareg_hm_tab_pval <- subset(metareg_hm_tab_pval, select = c("TG_pval","Stea_pval","LobIn_pval","Bal_pval","Fib_pval","NAS_pval","var"))
metareg_hm_tab_pval <- metareg_hm_tab_pval %>% filter(var == "Chol_per" | var == "Drug_dose" | var == "log_Age_end" | var == "log_Age_start" | var == "log_Duration" | var == "log_Fat_kcal" | var == "log_FructGluc_per" | var == "log_Gluc_change" | var == "log_Insul_change" | var == "log_Wt_change" | var == "log_Sucr_kcal" | var == "Qual_score")
rownames(metareg_hm_tab_pval) = metareg_hm_tab_pval[,7]
metareg_hm_tab_pval <- metareg_hm_tab_pval[ order(row.names(metareg_hm_tab_pval)), ]


metareg_hm_tab_pval_stars = as.data.frame(stars.pval(metareg_hm_tab_pval$Stea_pval))
metareg_hm_tab_pval_stars$TG_pval <- stars.pval(metareg_hm_tab_pval$TG_pval)
metareg_hm_tab_pval_stars$Stea_pval <- stars.pval(metareg_hm_tab_pval$Stea_pval)
metareg_hm_tab_pval_stars$LobIn_pval <- stars.pval(metareg_hm_tab_pval$LobIn_pval)
metareg_hm_tab_pval_stars$Bal_pval <- stars.pval(metareg_hm_tab_pval$Bal_pval)
metareg_hm_tab_pval_stars$Fib_pval <- stars.pval(metareg_hm_tab_pval$Fib_pval)
metareg_hm_tab_pval_stars$NAS_pval <- stars.pval(metareg_hm_tab_pval$NAS_pval)
metareg_hm_tab_pval_stars$var <- metareg_hm_tab_pval$var
rownames(metareg_hm_tab_pval_stars) = rownames(metareg_hm_tab)
metareg_hm_tab_pval_stars <- metareg_hm_tab_pval_stars[-c(1)]

hm_colnames = c("Hepatic TG content","Steatosis","Lobular \n Inflammation","Ballooning","Fibrosis","NAS","var")

hm_rownames = c("Cholesterol (% diet)", "Drug dose", "Age at end", "Age at start", "Duration of intervention", "Fat (%kcal diet)", "Fructose/glucose (% diet)", "Glucose change", "Insulin change", "Sucrose (%kcal diet)", "Weight change", "Quality score")

hm_metareg_sum <- pheatmap(metareg_hm_tab[1:6], cluster_rows = TRUE, cluster_cols = TRUE, angle_col = 45, cutree_rows = 2, display_numbers = metareg_hm_tab_pval_stars[1:6], fontsize_number=16, labels_row = hm_rownames, labels_col = hm_colnames)

pdf(file="hm_metareg_sum.pdf",width=6,height=6)
hm_metareg_sum
dev.off()









